---
id: upgrade
title: 1.6 更新日志
sidebar_label: 1.6 更新日志
---

import useBaseUrl from "@docusaurus/useBaseUrl";

**此章节只记录重大版本更新日志，小迭代版本不做更新。**想了解更多更新内容，可查阅 [CHANGELOG.md](https://gitee.com/dotnetchina/Furion/blob/master/CHANGELOG.md)

> 版本号规则：`主版本号.次版本号.修订版本号`
>
> - 只要确认为框架 `bug`，则当天修复，当天发版，修订版本号 `加 1`。
> - 只要 `.NET SDK` 版本更新，则当天升级，当天发版，修订版本号 `加 1`。
> - 如果 `.csproj` 文件有变更，则当天发版，修订版本号 `加 1`。
> - 如果新增 `拓展包`，为了版本号统一，则当天发版，修订版本号 `加 1`。
> - 如果涉及到代码重构，则当天发版，次版本号 `加 1`，修订版本号 `清 0`。
> - 如果 `.NET SDK` 主版本号升级，则当天发版，主版本号 `加 1`。

## v2.20（当前版本）

:::warning v2.20+ 版本说明

**在 `Furion v2.20+` 版本后采用 [Jaina](https://gitee.com/dotnetchina/Jaina) 事件总线替换原有的 `EventBus`**

:::

- **突破性变化**

  - [重构] `EventBus` 模块，采用 [Jaina](https://gitee.com/dotnetchina/Jaina) 方式

- **问题修复**

  - [修复] 远程请求上传文件异常 [0c0752](https://gitee.com/dotnetchina/Furion/commit/0c0752c624799d7d3c7661a8f36a93983399bb59)
  - [修复] 框架启动不支持环境变量 `ASPNETCORE_HOSTINGSTARTUPASSEMBLIES` 配置 [!438](https://gitee.com/dotnetchina/Furion/pulls/438)
  - [修复] 定时任务内存和CPU占用及特殊情况下空异常问题 [12c65de](https://gitee.com/dotnetchina/Furion/commit/12c65debf552c57780679e6a567a9dd9fb077f46)
  - [修复] 默认控制器启用规范化结果无效 bug[c7a4a5e](https://gitee.com/dotnetchina/Furion/commit/c7a4a5ef8c3282d245cbe04124cf379d381d496f)
  - [修正] 依赖注入 `InjectionAttribute` 特性的 `ExceptInterfaces` 单词拼写错误问题 [!436](https://gitee.com/dotnetchina/Furion/pulls/436)

- **其他更改**

  - [优化] `InjectionAttribute` 代码 [!435](https://gitee.com/dotnetchina/Furion/pulls/435)

- **文档**

  - [新增] 事件总线新文档

---

## v2.19（已发布）

- **新特性**

  - [新增] 定时任务监听器 `ISpareTimeListener` [#I468Q1](https://gitee.com/dotnetchina/Furion/issues/I468Q1)
  - [新增] 执行 `Sql` 支持 `JsonElement` 参数 [61985d6](https://gitee.com/dotnetchina/Furion/commit/61985d6a300485d553cbe8461b01f01bcd0936ef)
  - [新增] `Swagger` 配置枚举及标签排序过滤器 [#I46LON](https://gitee.com/dotnetchina/Furion/issues/I46LON) [!404](https://gitee.com/dotnetchina/Furion/pulls/404)
  - [新增] 远程请求 `application/octet-stream` 类型默认支持 [d9bad03](https://gitee.com/dotnetchina/Furion/commit/d9bad0320cc4a204e24bc3a070517ebce4cdc5d7)
  - [新增] 远程请求代理模式请求报文头支持 `IDictionary<string ,object>` 类型。[0204c0a](https://gitee.com/dotnetchina/Furion/commit/0204c0afe2de5c28ebbd44b29131e701b93ae8b8)
  - [新增] `MongoDB` 拓展类，添加更多常用操作方法 [!423](https://gitee.com/dotnetchina/Furion/pulls/423)
  - [新增] `DateTimeOffset?` 转换 `DateTime` 拓展（包含互换） [!432](https://gitee.com/dotnetchina/Furion/pulls/432)

- **问题修复**

  - [修复] `Scoped.Create` 在 `EFCore` 进行 `Add-Migration` 时候报空异常问题，原因是在 `PM` 环境中不存在根服务[0853e74](https://gitee.com/dotnetchina/Furion/commit/0853e74de90718fce9c0892e2ee4da597f62a918)
  - [修复] 定时任务执行异常后异常一直驻留内存问题，修正为执行成功自动清空过去异常 [197a62b](https://gitee.com/dotnetchina/Furion/commit/197a62bb4a7df34eb2c0dbda65121e9cf00d905c)
  - [修复] `Jwt` 拓展包不正确的代码导致 IOptions 失效[#I46LUP](https://gitee.com/dotnetchina/Furion/issues/I46LUP)
  - [修复] `Swagger` 枚举 `Schema` 过滤器不输出值问题 [#I46LON](https://gitee.com/dotnetchina/Furion/issues/I46LON) [!404](https://gitee.com/dotnetchina/Furion/pulls/404)
  - [修复] `Swagger` 处理非 `int` 类型枚举转换 bug [#I46QJ9](https://gitee.com/dotnetchina/Furion/issues/I46QJ9)
  - [修复] 视图引擎编译模板生成 `dll` 后再次加载出现 `IL` 格式化错误问题 [ff52d38](https://gitee.com/dotnetchina/Furion/commit/ff52d383718b4d34968619f17c9d54d8718b4f3f)
  - [修复] 管道 `Channel` 读取器无法释放 `Handler` 对象问题 [10f4a90](https://gitee.com/dotnetchina/Furion/commit/10f4a900ee558a29f40ae21366a0eba83eceb3eb)
  - [修复] `Worker Services` 下日志不输出问题 [c482548](https://gitee.com/dotnetchina/Furion/commit/c48254822c09092906ef77f04d54497e27665a92)
  - [修复] 远程请求 `multipart/form-data` 类型对接微信小程序上传文件 问题 [d9bad03](https://gitee.com/dotnetchina/Furion/commit/d9bad0320cc4a204e24bc3a070517ebce4cdc5d7)
  - [修复] 工作单元上下文在某些情况下共享事务失效问题 [006d439](https://gitee.com/dotnetchina/Furion/commit/006d439de3357d4d58ea6d7d3f9d51771a7b604e)
  - [修复] `Swagger` 枚举值在 `GET` 请求中 `Schema` 显示不正确问题 [fb72fd7](https://gitee.com/dotnetchina/Furion/commit/fb72fd7c98de5bf2246dd1bf08200152bd7ab7a0)
  - [修复] 远程请求 `404` 不走异常过滤器问题 [!426](https://gitee.com/dotnetchina/Furion/pulls/423)
  - [修复] 自定义事件总线并发情况下调用完成后无法正确处理队列数据 [!429](https://gitee.com/dotnetchina/Furion/pulls/429)
  - [修复] `v2.19+` 版本之后模块化开发加载外部程序集失效问题 [!433](https://gitee.com/dotnetchina/Furion/pulls/433)
  - [修复] 定时任务 SpareTime 频繁检查导致 CPU 增高问题 [aa0a2ee](https://gitee.com/dotnetchina/Furion/commit/aa0a2eec95f6ed2b74c681877498900726267d82)

- **特别鸣谢**

  - [YaChengMu](https://gitee.com/YaChengMu)

---

## v2.18（已发布）

- **新特性**

  - [新增] `Furion.Tools.CommandLine` 拓展库 [查看源码](https://gitee.com/dotnetchina/Furion/tree/master/tools/Furion.Tools/Furion.Tools.CommandLine)
  - [新增] 基于 `AsyncLocal<T>` 的 `CallContext` 实现 [9057a21](https://gitee.com/dotnetchina/Furion/commit/9057a212aab8057b668086bd14369fa68ce120df)
  - [新增] 远程请求可配置请求异常重试策略 [656da87](https://gitee.com/dotnetchina/Furion/commit/656da87a667c2da7d82425cdcd47146e99602d65)
  - [新增] 远程请求 `OnRequestFailded` 事件 [4a3da4b](https://gitee.com/dotnetchina/Furion/commit/4a3da4ba2c69380fe5f8c2fda80054544c0a3468)

- **突破性变化**

  - [移除] `Scoped` 所有带返回值方法 [656da87](https://gitee.com/dotnetchina/Furion/commit/656da87a667c2da7d82425cdcd47146e99602d65)
  - [调整] **在 `ConfigureService` 中调用 `App.GetOptions<>()` 获取配置逻辑** [afa4ac3](https://gitee.com/dotnetchina/Furion/commit/afa4ac347152ccac37bd1d0f9af1e8ffb665a662)

> 在过去，很多开发者总是喜欢在 `Startup.cs` 配置服务的 `ConfigureService` 方法中解析服务，这样导致内存存在溢出风险，GC 无法回收。
> 正确的方式是尽可能的避免 `ConfigureService` 中解析服务。**如果需要在【启动时】获取 `配置选项`，请使用 `App.GetConfig<TOptions>(路径, true)` 代替 `App.GetOptions<TOption>`**。

- **问题修复**

  - [修复] v2.16+ 版本重构 `AppDbContextBuilder` 之后写错实体类型 [#I45E6M](https://gitee.com/dotnetchina/Furion/issues/I45E6M)
  - [修复] 远程请求单个值序列化错误处理方式 [3282eba](https://gitee.com/dotnetchina/Furion/commit/3282eba2cecb505e339ef3f9c8e823f84dcb43f0)
  - [修复] v2.17.3+ 单元测试创建 `TestServer` bug [#I45JR3](https://gitee.com/dotnetchina/Furion/issues/I45JR3)
  - [修复] `Retry.Invoke` 正常方法死循环 bug [!392](https://gitee.com/dotnetchina/Furion/pulls/392)
  - [修复] 刷新 `Token` 生成新 `Token` 存在数组/集合类型导致 `Key` 重复异常问题 [aeea2b1](https://gitee.com/dotnetchina/Furion/commit/aeea2b1b19434f3171bd1c77be057ca36ecf9be2)
  - [修复] 远程请求序列化引用类型对象（不含 `string`）不正确的处理 [93cf63a](https://gitee.com/dotnetchina/Furion/commit/93cf63a023f3372b80edb5debc46271d2281318a)
  - [修复] `AppDbContext` 默认租户属性受工作单元影响问题 [e51557f](https://gitee.com/dotnetchina/Furion/commit/e51557fdf37ae5646b2ea37c227c970eccdbed38)

- **文档**

  - [新增] 包管理工具文档
  - [更新] 模板引擎、`Sql` 操作，`数据库上下文` 等等文档

---

## v2.17（已发布）

- **新特性**

  - [新增] `IPC（Inter-Process Communication，进程间通信）` 模块功能，目前提供进程内通信和共享内存进程外通讯 [ProcessChannel](https://gitee.com/dotnetchina/Furion/tree/master/framework/Furion/ProcessChannel)
  - [新增] 远程请求 `application/xml` 和 `text/xml` 默认支持 [4753a1a](https://gitee.com/dotnetchina/Furion/commit/4753a1aed527a6282fe6c05036de9d50bd3b3dd8)
  - [新增] 控制台全局异常拦截 [4a4fe1f](https://gitee.com/dotnetchina/Furion/commit/4a4fe1f40e1856ea36a0c0d19ca625d3f7bf95b7)
  - [新增] 支持自定义 `.json` 配置文件扫描目录 [3e2910a](https://gitee.com/dotnetchina/Furion/commit/3e2910a8b775fb6323e293b020bbe7cdfb4c6436)
  - [新增] 支持数据库实体接口显式实现接口配置 [9610a0a](https://gitee.com/dotnetchina/Furion/commit/9610a0a481f4f78770bc2fc3ed4cabbef2a8f937)
  - [新增] 控制台应用程序全局拦截 `[IfException]` 支持 [4a4fe1f](https://gitee.com/dotnetchina/Furion/commit/4a4fe1f40e1856ea36a0c0d19ca625d3f7bf95b7)
  - [新增] 依赖注入模块接口可以限制实现类生存周期，实现类也支持复写生存周期 [d2ce089](https://gitee.com/dotnetchina/Furion/commit/d2ce089130300cdd8b1bc6792f325c5d38ee9404)

- **突破性变化**

  - [抽离] `Oops.Retry()` 重试策略功能至新类：`Retry.Invoke()` [6a7bbd0](https://gitee.com/dotnetchina/Furion/commit/6a7bbd0b30a653b9a42d340a63520485aa6bbfa4)
  - [移除] `IHttpContextAccessor.SigninToSwagger()` 拓展，请使用 `IHttpContextAccessor.HttpContext.SigninToSwagger()`，退出也一样
  - [移除] 全局处理 `Request Body` 重复读处理 `Request.EnableBuffering()` [d92c24b](https://gitee.com/dotnetchina/Furion/commit/d92c24bdb43bfb01643007ebb6a4ee42a5c738e9)

- **问题修复**

  - [修复] 规范化状态码过滤逻辑错误问题 [#I44JYS](https://gitee.com/dotnetchina/Furion/issues/I44JYS)
  - [修复] 非关系型数据库（内存数据库）注册及操作异常 [e167651](https://gitee.com/dotnetchina/Furion/commit/e1676512a54374427bedbde17cd8cb59d7852557)
  - [修复] 远程请求默认序列化问题 [a55603b](https://gitee.com/dotnetchina/Furion/commit/a55603bf7ed109296375dbeffc31591a6f8f8e49)
  - [修复] 定时任务零点/整点提前一秒触发问题 [#I4321L](https://gitee.com/dotnetchina/Furion/issues/I4321L)
  - [修复] 友好异常在子类重写抽象类方法内部抛异常无法获取的问题 [4a4fe1f](https://gitee.com/dotnetchina/Furion/commit/4a4fe1f40e1856ea36a0c0d19ca625d3f7bf95b7)
  - [修复] 修复非 Web 项目抛异常问题 [4a4fe1f](https://gitee.com/dotnetchina/Furion/commit/4a4fe1f40e1856ea36a0c0d19ca625d3f7bf95b7)
  - [修复] 数据库实体模型贴 `[NotMapper]` 特性无效 [#I44MNO](https://gitee.com/dotnetchina/Furion/issues/I44MNO)

- **其他更改**

  - [调整] Swagger 生成泛型 SchemaIds 默认连接符，由 `Of` 改为 `_` [81946b6](https://gitee.com/dotnetchina/Furion/commit/81946b64e81d9e290f80cd5bcebdb69c99001153)

---

## v2.16（已发布）

- **新特性**

  - [新增] **`MVC` 控制器支持规范化处理 [#I427Z2](https://gitee.com/dotnetchina/Furion/issues/I427Z2)**
  - [新增] `throw Oops.Bah()` 抛出业务异常（状态码 `400`）
  - [新增] `UnifyResultSettings` 规范化 `json` 配置选项 [#I42NY7](https://gitee.com/dotnetchina/Furion/issues/I42NY7)
  - [新增] 多语言自定义配置资源文件名及自定义程序集 [#I434YJ](https://gitee.com/dotnetchina/Furion/issues/I434YJ)

- **突破性变化**

  - [调整] 规范化结果 `IUnifyResultProvider` 参数 **（破坏性更改）** [#I427Z2](https://gitee.com/dotnetchina/Furion/issues/I427Z2)
  - [调整] `IJsonSerializerProvider` 接口参数，去掉 `inherit` 参数 [a55603b](https://gitee.com/dotnetchina/Furion/commit/a55603bf7ed109296375dbeffc31591a6f8f8e49)

:::important 新版本自定义规范化结果

```cs {15-16}
using Furion.DataValidation;
using Furion.DependencyInjection;
using Furion.UnifyResult.Internal;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Threading.Tasks;

namespace Furion.UnifyResult
{
    /// <summary>
    /// RESTful 风格返回值
    /// </summary>
    [SuppressSniffer, UnifyModel(typeof(RESTfulResult<>))]
    public class RESTfulResultProvider : IUnifyResultProvider
    {
        /// <summary>
        /// 异常返回值
        /// </summary>
        /// <param name="context"></param>
        /// <param name="metadata"></param>
        /// <returns></returns>
        public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)
        {
            return new JsonResult(RESTfulResult(metadata.StatusCode, errors: metadata.Errors));
        }

        /// <summary>
        /// 成功返回值
        /// </summary>
        /// <param name="context"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public IActionResult OnSucceeded(ActionExecutedContext context, object data)
        {
            return new JsonResult(RESTfulResult(StatusCodes.Status200OK, true, data));
        }

        /// <summary>
        /// 验证失败返回值
        /// </summary>
        /// <param name="context"></param>
        /// <param name="metadata"></param>
        /// <returns></returns>
        public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)
        {
            return new JsonResult(RESTfulResult(StatusCodes.Status400BadRequest, errors: metadata.ValidationResult));
        }

        /// <summary>
        /// 特定状态码返回值
        /// </summary>
        /// <param name="context"></param>
        /// <param name="statusCode"></param>
        /// <param name="unifyResultSettings"></param>
        /// <returns></returns>
        public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)
        {
            // 设置响应状态码
            UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings);

            switch (statusCode)
            {
                // 处理 401 状态码
                case StatusCodes.Status401Unauthorized:
                    await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "401 Unauthorized")
                        , App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
                    break;
                // 处理 403 状态码
                case StatusCodes.Status403Forbidden:
                    await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "403 Forbidden")
                        , App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
                    break;
                default: break;
            }
        }

        /// <summary>
        /// 返回 RESTful 风格结果集
        /// </summary>
        /// <param name="statusCode"></param>
        /// <param name="succeeded"></param>
        /// <param name="data"></param>
        /// <param name="errors"></param>
        /// <returns></returns>
        private static RESTfulResult<object> RESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default)
        {
            return new RESTfulResult<object>
            {
                StatusCode = statusCode,
                Succeeded = succeeded,
                Data = data,
                Errors = errors,
                Extras = UnifyContext.Take(),
                Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
            };
        }
    }
}
```

:::

- **问题修复**

  - [修复] `MVC` 控制器启用规范化处理后返回 `new Json({})` 对象为 `null` 问题 [#I4354S](https://gitee.com/dotnetchina/Furion/issues/I4354S)

- **其他更改**

  - [优化] 多语言底层设计，取消需要创建 `Lang.cs` 空类的要求 [#I434YJ](https://gitee.com/dotnetchina/Furion/issues/I434YJ)
  - [优化] `MiniProfiler` 性能，减少不必要的监听

---

## v2.15（已发布）

- **新特性**

  - [新增] `Db.GetDbRepository<定位器>()` 静态方法 [#I41MZP](https://gitee.com/dotnetchina/Furion/issues/I41MZP)
  - [新增] 远程请求缺省序列化配置选项 [#I41PBW](https://gitee.com/dotnetchina/Furion/issues/I41PBW)

- **问题修复**

  - [修复] 自动扫描接口进行依赖注入获取首个接口错误 bug [#I41D1M](https://gitee.com/dotnetchina/Furion/issues/I41D1M)
  - [修复] `IRepository<TEntity>` 没有实现 `IRepository<TEntity, TDbContextLocator>` 问题 [#I41MZP](https://gitee.com/dotnetchina/Furion/issues/I41MZP)
  - [修复] 远程请求缺省序列化 bug [#I41PBW](https://gitee.com/dotnetchina/Furion/issues/I41PBW)
  - [修复] 修复 `AppDbContext.Tenant` 多租户空异常问题 [#I421DA](https://gitee.com/dotnetchina/Furion/issues/I421DA)
  - [修复] `Worker Service` 多个 `Worker` 定时任务阻塞问题 [82a79cc](https://gitee.com/dotnetchina/Furion/commit/82a79cce0a3d9b09f4090b7363c3b78327c76846)
  - [修复] `Jwt` 自动刷新机制时区处理问题，主要针对国外用户 [#I41UB1](https://gitee.com/dotnetchina/Furion/issues/I41UB1) [82a79cc](https://gitee.com/dotnetchina/Furion/commit/82a79cce0a3d9b09f4090b7363c3b78327c76846)

- **其他更改**

  - [优化] **系统启动性能，从 106M 减少到 84M**
  - [优化] **大量底层代码，包大小从 391Kb 减少到 350Kb（不带注释版本仅 64Kb）**

---

## v2.13/v2.14（已发布）

- **新特性**

  - [新增] 简易字符串模板功能，支持远程请求、数据库模块、日志模块、事件总线模块、定时任务模块、异常模块、数据校验模块 [#I402BL](https://gitee.com/dotnetchina/Furion/issues/I402BL)
  - [新增] `404` 状态码规范化默认处理 [#I408F5](https://gitee.com/dotnetchina/Furion/issues/I408F5)
  - [新增] 定时任务 `ISpareTimeWorker` 声明方式支持异步方法 [#I40KWR](https://gitee.com/dotnetchina/Furion/issues/I40KWR)
  - [新增] 自动配置二级虚拟目录 [!354](https://gitee.com/dotnetchina/Furion/pulls/354)

- **突破性变化**

  - [升级] **框架依赖 `SDK` 为 `.NET 5.0.8` 版本**
  - [移除] `Db.GetNewDbContext()` 静态方法 [#I400BK](https://gitee.com/dotnetchina/Furion/issues/I400BK)
  - [移除] 数据库模块时态表拓展支持 [#I405HI](https://gitee.com/dotnetchina/Furion/issues/I405HI)
  - [调整] `IJsonSerializerProvider` 接口参数，新增 `inherit` 参数 [#I3ZQU5](https://gitee.com/dotnetchina/Furion/issues/I3ZQU5)
  - [调整] `AppSettings` 配置的 `LogEntityFrameworkCoreSqlExecuteCommand` 名称为 `OutputOriginalSqlExecuteLog` [#I40VVE](https://gitee.com/dotnetchina/Furion/issues/I40VVE)

- **问题修复**

  - [修复] `Worker Services` 定时任务边界值问题导致跳过单次任务 [#I405NI](https://gitee.com/dotnetchina/Furion/issues/I405NI)
  - [修复] `Worker Services` 独立发布后程序集扫描失效 bug [#I3ZH3X](https://gitee.com/dotnetchina/Furion/issues/I3ZH3X)
  - [修复] 远程请求如果配置了 `Client` 客户端但传入了空 `RequestUrl` 地址导致异常问题 [#I40BC6](https://gitee.com/dotnetchina/Furion/issues/I40BC6)
  - [修复] 规范化结果篡改非短路端状态码出现异常 bug [#I408F5](https://gitee.com/dotnetchina/Furion/issues/I408F5)

- **其他更改**

  - [优化] `App.GetServiceProvider(type)` 解析服务性能 [#I40KXN](https://gitee.com/dotnetchina/Furion/issues/I40KXN)
  - [调整] 视图引擎保存成文件流默认缓存区大小，从 `4096` 提升至 `8192` [#I40KH5](https://gitee.com/dotnetchina/Furion/issues/I40KH5)

---

## v2.10/2.11/2.12 （已发布）

> 该版本有多个破坏性更改，更新时请认真查看。

- **新特性**

  - [新增] `App.Configuration.Reload()` 拓展 [#I3XYI8](https://gitee.com/dotnetchina/Furion/issues/I3XYI8)
  - [新增] `ISubscribeHandler` 支持异步方法定义 [#I3XYHJ](https://gitee.com/dotnetchina/Furion/issues/I3XYHJ)
  - [新增] `app.UseUnifyResultStatusCodes()` 可配置修改返回状态码 [#I3VZQH](https://gitee.com/dotnetchina/Furion/issues/I3VZQH)
  - [新增] 远程请求添加默认 `User-Agent` 头 [#I3W17C](https://gitee.com/dotnetchina/Furion/issues/I3W17C)
  - [新增] 支持 `Sql` 高级代理切换数据库上下文定位器 [#I3XFP6](https://gitee.com/dotnetchina/Furion/issues/I3XFP6) [#I3XDCR](https://gitee.com/dotnetchina/Furion/issues/I3XDCR)
  - [新增] 定时任务 `CronFormat` 自动识别 [#I3Y7GT](https://gitee.com/dotnetchina/Furion/issues/I3Y7GT)
  - [新增] `Sql 高级代理` 拦截功能 [#I3YHG4](https://gitee.com/dotnetchina/Furion/issues/I3YHG4)
  - [新增] 拦截远程请求所有异常处理 [#I3YPDE](https://gitee.com/dotnetchina/Furion/issues/I3YPDE)
  - [新增] 远程请求配置 `Timeout` 超时时间 [#I3YPPK](https://gitee.com/dotnetchina/Furion/issues/I3YPPK)
  - [新增] 新增 `RSA` 加密算法 [#I3YZNU](https://gitee.com/dotnetchina/Furion/issues/I3YZNU) [!345](https://gitee.com/dotnetchina/Furion/pulls/345)
  - [新增] `DataTable` 和 `DataSet` 支持不指定强类型返回 [#I3Z6RI](https://gitee.com/dotnetchina/Furion/issues/I3Z6RI)
  - [新增] `Sql` 字符串拓展方法设置 `Timeout` 超时时间 [#I3ZKWF](https://gitee.com/dotnetchina/Furion/issues/I3ZKWF)
  - [新增] `Sql` 高级代理 `[Timeout]` 特性，设置超时时间 [#I3ZKWF](https://gitee.com/dotnetchina/Furion/issues/I3ZKWF)

- **突破性变化**

  - [移除] **`FakeDelete` 假删除/软删除所有功能 [#I3XKII](https://gitee.com/dotnetchina/Furion/issues/I3XKII)**
  - [移除] **移除 `PBKDF2` 加密算法 [#I3Z0IO](https://gitee.com/dotnetchina/Furion/issues/I3Z0IO)**
  - [调整] **远程请求设置超时时间单位由 `分钟` 改为 `秒` [#I3YPPK](https://gitee.com/dotnetchina/Furion/issues/I3YPPK)**
  - [调整] **`IJsonSerializerProvider` 接口参数，新增 `inherit` 参数 [#I3ZQU5](https://gitee.com/dotnetchina/Furion/issues/I3ZQU5)**
  - [调整] `[NonAutomatic]` 特性名称为 `[Manual]` [#I3XKKX](https://gitee.com/dotnetchina/Furion/issues/I3XKKX)
  - [调整] `[NotChangedListener]` 特性名称为 `[SuppressChangedListener]` [#I3XKLZ](https://gitee.com/dotnetchina/Furion/issues/I3XKLZ)
  - [调整] `[ManualSaveChanges]` 名称为 `[ManualCommit]` [#I3XKNP](https://gitee.com/dotnetchina/Furion/issues/I3XKNP)
  - [调整] **`DbContext.TenantIdQueryFilterExpression` 名称为 `DbContext.BuildTenantQueryFilter` [#I3XKTB](https://gitee.com/dotnetchina/Furion/issues/I3XKTB)**
  - [调整] `[SkipScan]` 名称为 `[SuppressSniffer]` [#I3XN5N](https://gitee.com/dotnetchina/Furion/issues/I3XN5N)
  - [调整] `[SkipProxy]` 名称为 `[SuppressProxy]` [#I3XN7O](https://gitee.com/dotnetchina/Furion/issues/I3XN7O)
  - [重构] `Sql` 执行，性能提升 20% [#I3W33U](https://gitee.com/dotnetchina/Furion/issues/I3W33U)

- **问题修复**

  - [修复] 动态 WebAPI 扫描控制器没有屏蔽没有注册的第三方控制器 [#I3Y7TJ](https://gitee.com/dotnetchina/Furion/issues/I3Y7TJ)
  - [修复] `AppDbContext` 设置 `TablePrefix` 无效： [#I3Y57Q](https://gitee.com/dotnetchina/Furion/issues/I3Y57Q)
  - [修复] 修复定时任务使用异步委托导致程序终止 bug [#I3XVZ0](https://gitee.com/dotnetchina/Furion/issues/I3XVZ0)
  - [修复] 事件总线一个 `消息id` 对应多个 `Handler` 只触发第一个[#I3XYP0](https://gitee.com/dotnetchina/Furion/issues/I3XYP0)
  - [修复] `.ToPagedList()` 分页方法传入小于或等于 0 的页码 [#I3XNAN](https://gitee.com/dotnetchina/Furion/issues/I3XNAN)
  - [修复] `JSON` 序列化默认 `DateTimeOffset` 异常 [#I3XMOL](https://gitee.com/dotnetchina/Furion/issues/I3XMOL)
  - [修复] 继承 `Serilog` 日志在 `Worker Service` 生成重复日志 bug [#I3WA0L](https://gitee.com/dotnetchina/Furion/issues/I3WA0L) [!331](https://gitee.com/dotnetchina/Furion/pulls/331)
  - [修复] `粘土对象` 动态添加 `Clay` 类型 bug [#I3W9LW](https://gitee.com/dotnetchina/Furion/issues/I3W9LW)
  - [修复] `ValidationTypes.Numeric` 校验数值类型正则表达式错误 [#I3WADS](https://gitee.com/dotnetchina/Furion/issues/I3WADS)
  - [修复] 数据库命令参数 `DbParameter` 的 `Value` 是 `object` 类型的时候且不指定 [#I3YKM6](https://gitee.com/dotnetchina/Furion/issues/I3YKM6)
  - [修复] `Oracle` 数据库存储过程 `游标参数` 报错问题 [#I3ZBYE](https://gitee.com/dotnetchina/Furion/issues/I3ZBYE)
  - [修复] `Worker Services` 采用独立发布后无法执行问题 [#I3ZH3X](https://gitee.com/dotnetchina/Furion/issues/I3ZH3X)
  - [修复] 修复远程请求如果无返回值序列化异常问题 [!348](https://gitee.com/dotnetchina/Furion/pulls/348)

- **其他更改**

  - [增强] 支持 `appsettings.json` 等自定义配置文件中文命名 [#I3YBFD](https://gitee.com/dotnetchina/Furion/issues/I3YBFD)
  - [改进] 远程请求配置命名客户端 `BaseAddress` 地址兼容处理 [#I3YCRH](https://gitee.com/dotnetchina/Furion/issues/I3YCRH)
  - [移除] 框架无用代码、优化代码
  - [优化] `Furion` 在 `非 Web` 环境下性能

- **文档变化**

  - [新增] 会话和状态管理 文档 [#I3YI3G](https://gitee.com/dotnetchina/Furion/issues/I3YI3G)
  - [更新] 远程请求、日志、数据库上下文、远程请求、`Sql` 高级代理文档
  - [更新] 配置文件 [#I3Y2EV](https://gitee.com/dotnetchina/Furion/issues/I3Y2EV)

- **问答答疑**

  - [答疑] `dapper` 多个数据源如何继承 [#I3WUOI](https://gitee.com/dotnetchina/Furion/issues/I3WUOI)
  - [答疑] 关于 `SpareTime` 多次执行问题[#I3XEQU](https://gitee.com/dotnetchina/Furion/issues/I3XEQU)
  - [答疑] 选项更改通知（热更新）：数据库里的数据更改了如何通知选项进行改变？ [#I3XYI8](https://gitee.com/dotnetchina/Furion/issues/I3XYI8)
  - [答疑] `SaaS` 多租户添加时无法获取租户`Id` [#I3Y5CF](https://gitee.com/dotnetchina/Furion/issues/I3Y5CF)
  - [答疑] 获取 `_httpContextAccessor.HttpContext` 为空[#I3Y6BI](https://gitee.com/dotnetchina/Furion/issues/I3Y6BI)
  - [答疑] `Ubuntu` 中使用 `App.Configuration` 方法读取不到值 [#I3Y74H](https://gitee.com/dotnetchina/Furion/issues/I3Y74H)
  - [答疑] 数据库上下文作用域问题 [#I3YHXP](https://gitee.com/dotnetchina/Furion/issues/I3YHXP)
  - [答疑] 使用 `UnitofWork` 提交事务，可以提交成功，但是系统会有错误 [#I3YIWU](https://gitee.com/dotnetchina/Furion/issues/I3YIWU)
  - [答疑] 数据库读写分离--非默认主库的从库随机该如何配置？ [#I3YVR7](https://gitee.com/dotnetchina/Furion/issues/I3YVR7)

- **不做实现**

  - [废弃] `SpareTIme` 新增 `Dashboard` 控制台看板，同时可以对任务进行暂停、删除、查看[#I3XELY](https://gitee.com/dotnetchina/Furion/issues/I3XELY)

---

## v2.9.0 （当前版本）

- **新特性**

  - [新增] **应用全局未托管资源监听，并实现特定时机释放非托管资源** [#I3VXAU](https://gitee.com/dotnetchina/Furion/issues/I3VXAU)
  - [新增] 不包含 `EntityFramework.Core` 版本的 `Furion.Pure` 包[#I3VGW8](https://gitee.com/dotnetchina/Furion/issues/I3VGW8)
  - [新增] swagger 支持设置多语言方式，设置的语言自动添加到 api 地址后面 [#I3VDTD](https://gitee.com/dotnetchina/Furion/issues/I3VDTD)
  - [新增] 动态 WebAPI 支持 `[FromRoute]` 非必填（选填）参数设置 [#I3VFIM](https://gitee.com/dotnetchina/Furion/issues/I3VFIM)
  - [新增] 动态 WebAPI 参数支持配置路由约束 [#I3VFIR](https://gitee.com/dotnetchina/Furion/issues/I3VFIR)
  - [新增] `MD5` 和 `DESC` 加密支持 `大写` 输出 [#326](https://gitee.com/dotnetchina/Furion/pulls/326)

- **突破性变化**

  - [新增] `Furion` 所有包生成 `.snupkg` 包，支持开发阶段直接调试 `Furion` 所有包源码 [#I3VFIX](https://gitee.com/dotnetchina/Furion/issues/I3VFIX)
  - [调整] `repository.BuildChange()` 方法的返回值，多返回一个 `IServiceScope` 对象 [#I3VX3D](https://gitee.com/dotnetchina/Furion/issues/I3VX3D)
  - [调整] `JWT` 刷新 `Token` 方法 `AutoRefreshToken` 参数 `days` 改为 `minutes` [#I3VXNB](https://gitee.com/dotnetchina/Furion/issues/I3VXNB)

- **问题修复**

  - [修复] `App.GetOptionsSnapshot<>` 从根服务解析异常 bug [#I3VS2X](https://gitee.com/dotnetchina/Furion/issues/I3VS2X)
  - [修复] 修复远程请求如果出现异常，返回 `Stream` 为 null 导致异常的问题 [#I3VSTU](https://gitee.com/dotnetchina/Furion/issues/I3VSTU)
  - [修复] 如果实体被跟踪后，无法执行删除操作 [#I3W08P](https://gitee.com/dotnetchina/Furion/issues/I3W08P)

- **其他更改**

  - [优化] 运行时内存，实现请求结束自动释放未托管资源 [#I3VXAU](https://gitee.com/dotnetchina/Furion/issues/I3VXAU)

- **文档变化**

  - [更新] `App` 静态类文档、远程请求文档、分表分库文档

- **问答答疑**

  - [答疑] 动态 WebAPI，自定义根据方法名生成 [HttpMethod] 规则报错 [#I3VKQG](https://gitee.com/dotnetchina/Furion/issues/I3VKQG)
  - [答疑] `InsertAsync` 的时候提示 `ID` 为空 [#I3VS7E](https://gitee.com/dotnetchina/Furion/issues/I3VS7E)
  - [答疑] `FirstOrDefault` 自动过滤了 `TanantId` 字段 [#I3W0VH](https://gitee.com/dotnetchina/Furion/issues/I3W0VH)
  - [答疑] 对方接口返回 `HttpConnectionResponseContent` 远程请求拿不到返回值 [#I3W17C](https://gitee.com/dotnetchina/Furion/issues/I3W17C)
  - [答疑] 查询方法 `FindOrDefault` 报错 [#I3W830](https://gitee.com/dotnetchina/Furion/issues/I3W830)
  - [答疑] `SqlNonQuery` 在 `UnitOfWork` 循环执行[#I3W8WW](https://gitee.com/dotnetchina/Furion/issues/I3W8WW)
  - [答疑] 因 `Swagger` 配置问题，导致 `Swagger` 中不能自动携带 token 授权的问题 [#I3W934](https://gitee.com/dotnetchina/Furion/issues/I3W934)
  - [答疑] 远程请求 `SetBody` 参数识别不了[#I3WBM1](https://gitee.com/dotnetchina/Furion/issues/I3WBM1)
  - [答疑] `Scoped.Create` 里执行 `sql.SqlNonQuery()` 或者 `obj.insert()` 问题[#I3WB5O](https://gitee.com/dotnetchina/Furion/issues/I3WB5O)
  - [答疑] 调用函数或存储过程，怎么出参数据自定义对象？如 `Oracle`数据库的数组或记录 [#I3W71W](https://gitee.com/dotnetchina/Furion/issues/I3W71W)

- **不做实现**

  - [无效] 数据库小写下划线字段，无法自动映射成小驼峰 [#I3W021](https://gitee.com/dotnetchina/Furion/issues/I3W021)
  - [废弃] `EfCore 5` 直接多对多时进行 `SeedData` [#I3WDRJ](https://gitee.com/dotnetchina/Furion/issues/I3WDRJ)

---

## v2.7.0/2.8.0 （已发布）

- **新特性**

  - [新增] `throw Oops.On("异常消息")` 应用多语言支持 [#I3UYC2](https://gitee.com/dotnetchina/Furion/issues/I3UYC2)
  - [新增] `Db.GetMSRepository()` 获取主从库仓储静态方法 [#I3UBSJ](https://gitee.com/dotnetchina/Furion/issues/I3UBSJ)
  - [新增] 工作单元特性，支持静态类强制性开启共享事务 [#I3S9N8](https://gitee.com/dotnetchina/Furion/issues/I3S9N8)
  - [新增] `EFCore` 执行 `sql` 模式打印日志 [#I3SE8X](https://gitee.com/dotnetchina/Furion/issues/I3SE8X)
  - [新增] 远程请求支持默认 `HttpClient` 配置 [#I3SI17](https://gitee.com/dotnetchina/Furion/issues/I3SI17)
  - [新增] 新增 `短 ID` 生成功能 [#I3T7JP](https://gitee.com/dotnetchina/Furion/issues/I3T7JP)
  - [新增] `[SensitiveDetection]` 支持配置替换敏感词汇 [#I3THIA](https://gitee.com/dotnetchina/Furion/issues/I3THIA)
  - [新增] `SpecificationDocumentBuilder.DocumentGroups` 和 `SpecificationDocumentBuilder.CheckApiDescriptionInCurrentGroup(currentGroup, apiDescription)` 公开方法[#I3UDSY](https://gitee.com/dotnetchina/Furion/issues/I3UDSY)

- **突破性变化**

  - [重构] 自动扫描 `.json` 和 `.xml` 文件并加载到配置中的代码和规则，同时移除默认 `.xml` 文件加载，只保留 `.json` 文件 [#I3UJ3L](https://gitee.com/dotnetchina/Furion/issues/I3UJ3L)
  - [重构] 分布式连续 `GUID` 代码 [#I3UBK0](https://gitee.com/dotnetchina/Furion/issues/I3UBK0)
  - [调整] **`Scoped.CreateUnitOfWork` 名称为 `Scoped.CreateUow` [#I3SJPU](https://gitee.com/dotnetchina/Furion/issues/I3SJPU)**
  - [调整] `JWTEncryption.Validate` 返回值，支持返回 `TokenValidationResult` [#I3S2ND](https://gitee.com/dotnetchina/Furion/issues/I3S2ND)

- **问题修复**

  - [修复] `[DataValidation]` 和 `[SensitiveDetection]` 多语言应用失效 [#I3UH6U](https://gitee.com/dotnetchina/Furion/issues/I3UH6U)
  - [修复] `Scoped` 系列方法异步出现 `Task is cancel` 情况 [#I3SJF6](https://gitee.com/dotnetchina/Furion/issues/I3SJF6)
  - [修复] `Mysql` 数据库的 `ToPagedList` 方法返回的结果进行遍历出现 `MySqlConnection is aleady use` 问题 [#I3SJQ3](https://gitee.com/dotnetchina/Furion/issues/I3SJQ3)
  - [修复] `tool/cli.psl` 没有包含项目名称 [#I3S1T6](https://gitee.com/dotnetchina/Furion/issues/I3S1T6)
  - [修复] 远程请求做上传文件时，没有传入 `Body`，程序直接跳过 [#I3TKFH](https://gitee.com/dotnetchina/Furion/issues/I3TKFH)
  - [修复] 远程请求 `multipart/form-data` 内容分割符缺失 [#I3TNO9](https://gitee.com/dotnetchina/Furion/issues/I3TNO9)
  - [修复] 远程请求代理拦截方式返回 `HttpResponseMessage` 问题 [#I3V161](https://gitee.com/dotnetchina/Furion/issues/I3V161)
  - [修复] `repository.Database.SetCommandTimeout(600)` 无法生效[#I3VAQS](https://gitee.com/dotnetchina/Furion/issues/I3VAQS)

- **其他更改**

  - [改进] 支持规范化结果中间件判断是否跳过规范化结果 [#I3T2AA](https://gitee.com/dotnetchina/Furion/issues/I3T2AA)
  - [调整] 更新部分列 `UpdateIncludeNowAsync` 具有二义性 [#I3RW9Q](https://gitee.com/dotnetchina/Furion/issues/I3RW9Q)
  - [优化] **框架底层性能，大大减少内存占用和溢出情况，启动内存从之前 `136M` 下将到 `86M`**
  - [其他] 删除无用代码，优化不规范命名等

- **文档变化**

  - [新增] `Inject` 说明文档 [#I3TITA](https://gitee.com/dotnetchina/Furion/issues/I3TITA)
  - [更新] 4.2.9 的示例代码文档，方法没有放在 class 中 [#I3S9T5](https://gitee.com/dotnetchina/Furion/issues/I3S9T5)
  - [修正] 规范化结果 6.5.6 多分组排序图片引用错误 [#I3UBOQ](https://gitee.com/dotnetchina/Furion/issues/I3UBOQ)
  - [更新] 静态类 `Scoped` 文档

- **问答答疑**

  - [答疑] 默认 `MasterDbContextLocator` 不随自定义的参数生成 [#I3SDBB](https://gitee.com/dotnetchina/Furion/issues/I3SDBB)
  - [答疑] 事件总线中订阅处理程序类获取不到用户信息，这个正常吗 [#I3SS0U](https://gitee.com/dotnetchina/Furion/issues/I3SS0U)
  - [答疑] 在有多租户过滤器的情况下，是否有一种方式查询全量的数据 [#I3T0VI](https://gitee.com/dotnetchina/Furion/issues/I3T0VI)
  - [答疑] mysql 使用 `&"tools/cli.ps1"` 页面化加载表结构失败 [#I3T4F8](https://gitee.com/dotnetchina/Furion/issues/I3T4F8)
  - [答疑] 其他 Web 层的 Startup 优先执行 [#I3T8IP](https://gitee.com/dotnetchina/Furion/issues/I3T8IP)
  - [答疑] 辅助角色服务实现建议 [#I3T906](https://gitee.com/dotnetchina/Furion/issues/I3T906)
  - [答疑] 开启 `easy connection` 后同一内网地址浏览器可以正常访问，远程请求则无法访问[#I3TA2U](https://gitee.com/dotnetchina/Furion/issues/I3TA2U)
  - [答疑] `scope.ServiceProvider.GetService<IOtherService>`不存在 [#I3TQMV](https://gitee.com/dotnetchina/Furion/issues/I3TQMV)
  - [答疑] 能否在 WPF 项目中使用呢？ [#I3TMCC](https://gitee.com/dotnetchina/Furion/issues/I3TMCC)
  - [答疑] `Dapper` 多个数据源 [#I3TM9B](https://gitee.com/dotnetchina/Furion/issues/I3TM9B)
  - [答疑] `L.GetSelectCulture()` 方法异常 [#I3TQS4](https://gitee.com/dotnetchina/Furion/issues/I3TQS4)
  - [答疑] 循环中使用 `IDGen.NextID()` 得到的结果并不是连续的 [#I3UAF6](https://gitee.com/dotnetchina/Furion/issues/I3UAF6)
  - [答疑] 模块化动态加载插件支持通配符匹配.dll [#I3UDT8](https://gitee.com/dotnetchina/Furion/issues/I3UDT8)
  - [答疑] `MVC` 模式，在 `Controller` 里快捷方式创建 `View` 页面出错 [#I3UFGB](https://gitee.com/dotnetchina/Furion/issues/I3UFGB)
  - [答疑] 数据库迁移没有种子数据 [#I3UI7G](https://gitee.com/dotnetchina/Furion/issues/I3UI7G)
  - [答疑] `SpareTimeAttribute` 中 根据 Cron 表达式 自动匹配 Cron 表达式格式化方式 [#I3UTKQ](https://gitee.com/dotnetchina/Furion/issues/I3UTKQ)
  - [答疑] 使用 `workService` 集成 `SqlSugar` 报错 [#I3V8HJ](https://gitee.com/dotnetchina/Furion/issues/I3V8HJ)
  - [答疑] `sqlserver 2008` 分页报错如何解决呢 [#I3VF96](https://gitee.com/dotnetchina/Furion/issues/I3VF96)

- **不做实现**

  - [废弃] 添加令牌桶限流算法 [#I3SCDV](https://gitee.com/dotnetchina/Furion/issues/I3SCDV)
  - [废弃] 定时任务立即执行需求 [#I3SF4A](https://gitee.com/dotnetchina/Furion/issues/I3SF4A)
  - [废弃] 文档建议 关于 reids 和 es 、消息队列的 [#I3T90I](https://gitee.com/dotnetchina/Furion/issues/I3T90I)
  - [废弃] IP 高频率请求限制 [#I3UHE1](https://gitee.com/dotnetchina/Furion/issues/I3UHE1)
  - [废弃] `Url` 转发大模块 [#I3TZHO](https://gitee.com/dotnetchina/Furion/issues/I3TZHO)

---

## v2.5.0/2.6.0 （已发布）

- **新特性**

  - [新增] 虚拟文件服务，支持物理文件和嵌入资源文件 [#I3RBR9](https://gitee.com/dotnetchina/Furion/issues/I3RBR9)
  - [新增] 读写分离/主从复制仓储 `IMSRepository` 和 `IMSRepository<TMasterDbContextLocator>` 仓储，可进行随机或自定义获取从库
  - [新增] 数据脱敏处理 [#I3R5ZF](https://gitee.com/dotnetchina/Furion/issues/I3R5ZF)

- **突破性变化**

  - [移除] **`InsertOrUpdate` 一系列数据库操作方法** [#I3RI9L](https://gitee.com/dotnetchina/Furion/issues/I3RI9L)
  - [移除] 所有包含 `Exists` 单词的数据库操作方法 [#I3RJ0T](https://gitee.com/dotnetchina/Furion/issues/I3RJ0T)
  - [调整] 分布式 GUID `IDGenerater` 静态类名称为 `IDGen` [#I3RGUA](https://gitee.com/dotnetchina/Furion/issues/I3RGUA)

- **问题修复**

  - [修复] 远程调用方法错误，请求报文头 `Headers` 不能添加到 `IHttpDispatchProxy` 的子接口上 [#I3RAF7](https://gitee.com/dotnetchina/Furion/issues/I3RAF7)

- **其他更改**

  - [优化] 应用启动性能，减少内存分配

- **文档变化**

  - [新增] 脱敏处理文档 [#I3R6WZ](https://gitee.com/dotnetchina/Furion/issues/I3R6WZ)
  - [新增] 文件系统文档、`FS` 静态类文档 [#I3RCC4](https://gitee.com/dotnetchina/Furion/issues/I3RCC4)
  - [更新] 读写分离/主从复制、数据库仓储文档、`Db` 静态类 [#I3R3B6](https://gitee.com/dotnetchina/Furion/issues/I3R3B6)

- **问答答疑**

  - [答疑] 关于 `Furion` 集群部署 [#I3R3J4](https://gitee.com/dotnetchina/Furion/issues/I3R3J4)
  - [答疑] 升级最新框架以后， 数据库生成模型报错 [#I3R7TP](https://gitee.com/dotnetchina/Furion/issues/I3R7TP)
  - [答疑] 数据库上下文事务执行中，`SaveNow` 执行后有警告 [#I3RAJI](https://gitee.com/dotnetchina/Furion/issues/I3RAJI)
  - [答疑] `Hangfire` 使用事务出现错误 [#I3ROQ5](https://gitee.com/dotnetchina/Furion/issues/I3ROQ5)
  - [答疑] 如何实现 cli 不执行某些表的迁移，web 请求可以正常操作呢？ [#I3ROU5](https://gitee.com/dotnetchina/Furion/issues/I3ROU5)
  - [答疑] 在使用定时任务时候出现的问题：继承 `ISpareTimeWorker` [#I3RRZS](https://gitee.com/dotnetchina/Furion/issues/I3RRZS)
  - [答疑] `MySql` 时间差 8 小时处理 [#I3RSCO](https://gitee.com/dotnetchina/Furion/issues/I3RSCO)
  - [答疑] `Db.GetRepository<>` 方法结合 `[UnitOfWork]` 后不可用 [#I3RUK5](https://gitee.com/dotnetchina/Furion/issues/I3RUK5)
  - [答疑] 事务开启失败问题 [#I3RYJY](https://gitee.com/dotnetchina/Furion/issues/I3RYJY)
  - [答疑] 支持 `DbProvider` 可动态配置 [#I3RYPE](https://gitee.com/dotnetchina/Furion/issues/I3RYPE)
  - [答疑] `WorkService` 依赖注入 `ISingleton` 问题 [#I3RZ1L](https://gitee.com/dotnetchina/Furion/issues/I3RZ1L)
  - [答疑] `ISpareTimeWorker` 运行期动态修改 [#I3S33Q](https://gitee.com/dotnetchina/Furion/issues/I3S33Q)

- **不做实现**

  - [拒绝] 有序 `Guid` 精度是固定的毫秒级：1 毫秒内生成的多个 `Guid` 是无序的 [#I3R59J](https://gitee.com/dotnetchina/Furion/issues/I3R59J)
  - [拒绝] 建议:JWTEncryption.Validate 方法返回 JWT 的检查失败时的原因 [#I3S1F2](https://gitee.com/dotnetchina/Furion/issues/I3S1F2)

---

## v2.4.0 （已发布）

- **新特性**

  - [新增] 支持自动加载模块化/插件 `.xml` 注释文件 [#I3Q7XY](https://gitee.com/dotnetchina/Furion/issues/I3Q7XY)
  - [新增] `AppDbContext.FailedAutoRollback` 属性，可配置事务是否自动回滚 [#I3QOUS](https://gitee.com/dotnetchina/Furion/issues/I3QOUS)

- **突破性变化**

  - [升级] **.NET 5 SDK 为 5.0.6 版本**
  - [新增] `IJsonSerializerProvider.GetSerializerOptions()` 接口方法 [#I3QIJN](https://gitee.com/dotnetchina/Furion/issues/I3QIJN)

- **问题修复**

  - [修复] 通过 `services.AddInject()` 方式注册，模块化/插件不加载 [#I3Q7XH](https://gitee.com/dotnetchina/Furion/issues/I3Q7XH)
  - [修复] 种子数据返回 `null` 报空异常 [#I3QCM5](https://gitee.com/dotnetchina/Furion/issues/I3QCM5)
  - [修复] 通过 `Clay.Object` 创建粘土对象后属性变小写问题 [#I3QRV3](https://gitee.com/dotnetchina/Furion/issues/I3QRV3)

- **其他更改**

  - [优化] `Furion` 框架底层性能，减少内存占用，提高应用初始化速度 [92f8cc1](https://gitee.com/dotnetchina/Furion/commit/92f8cc1)

- **文档变化**

  - [更新] JSON 序列化文档、规范化结果文档、数据库上下文文档

- **问答答疑**

  - [答疑] `InsertOrUpdateNowAsync` 报错 [#I3QKO5](https://gitee.com/dotnetchina/Furion/issues/I3QKO5)

- **不做实现**

  - [废弃] 定时任务自定义 `Failed` 事件 [#I3QCM2](https://gitee.com/dotnetchina/Furion/issues/I3QCM2)
  - [废弃] 模块化动态生成数据库表 [#I3QH3G](https://gitee.com/dotnetchina/Furion/issues/I3QH3G)
  - [废弃] 建议事件总线新增 MQ 支持 [#I3QWZ4](https://gitee.com/dotnetchina/Furion/issues/I3QWZ4)
  - [废弃] 重构规范化整个模块代码 [#I3NFT7](https://gitee.com/dotnetchina/Furion/issues/I3NFT7)

---

## v2.3.0 （已发布）

- **新特性**

  - [新增] `Furion.Extras.DatabaseAccessor.MongoDB` 拓展包支持 [#I3PKST](https://gitee.com/dotnetchina/Furion/issues/I3PKST)
  - [新增] 动态粘土类型直接转 `object` 或 `dynamic` 类型 [#I3OY27](https://gitee.com/dotnetchina/Furion/issues/I3OY27)
  - [新增] 新增 `Oops.Retry` 方法，支持设置方法调用失败进行重试 [#I3PJKQ](https://gitee.com/dotnetchina/Furion/issues/I3PJKQ)
  - [新增] `JWTSettings` 配置节点 `Algorithm`，用于配置加密算法 [#I3PQGV](https://gitee.com/dotnetchina/Furion/issues/I3PQGV)
  - [新增] `repository.EnsureTransaction()` 方法确保工作单元事务有效 [#I3PVF1](https://gitee.com/dotnetchina/Furion/issues/I3PVF1)

- **突破性变化**

  - [支持] 支持 .NET 6.0.0 Preview 3 版本 [#I3P2C7](https://gitee.com/dotnetchina/Furion/issues/I3P2C7)

- **问题修复**

  - [修复] 使用数据库生成模型 `tools/cli.ps1`，从数据库表生成的实体异常 [#I3PL18](https://gitee.com/dotnetchina/Furion/issues/I3PL18)
  - [修复] 贴了 `[NonUntify]` 特性后，`Swagger` 的 `Example Value` 没有匹配正确 [#I3PK0L](https://gitee.com/dotnetchina/Furion/issues/I3PK0L)
  - [修复] `SpareTimer.Tally` 在 `Cron` 表达式中计数无效 [#I3PWSE](https://gitee.com/dotnetchina/Furion/issues/I3PWSE)

- **其他更改**

  - [改进] 框架默认序列化应该从配置中读取，而非手动编写 [#I3P1SJ](https://gitee.com/dotnetchina/Furion/issues/I3P1SJ)
  - [改进] `SqlSugar` 拓展库，支持非泛型仓储获取上下文操作对象 [#I3PK2N](https://gitee.com/dotnetchina/Furion/issues/I3PK2N)
  - [改进] 支持分布式内存缓存可配置化 [#I3POKD](https://gitee.com/dotnetchina/Furion/issues/I3POKD)

- **文档变化**

  - [文档] 添加 `JWTSettings` 配置独立文档 [#I3PQGW](https://gitee.com/dotnetchina/Furion/issues/I3PQGW)

- **问答答疑**

  - [答疑] 软删除如果数据不存在，则报错 [#I3PTVB](https://gitee.com/dotnetchina/Furion/issues/I3PTVB)
  - [答疑] 多个类集成测试会造成数据库定位器多次注册，无法运行所有测试，只能一个类一个类的运行 [#I3PXGY](https://gitee.com/dotnetchina/Furion/issues/I3PXGY)

- **不做实现**

  - [废弃] CAS 支持[#I3PIET](https://gitee.com/dotnetchina/Furion/issues/I3PIET)

---

## v2.2.0 （已发布）

- **新特性**

  - [新增] `Clay` 粘土类型，支持让 `C#` 创建一个弱类型对象并操作弱类型 [#I3O2QQ](https://gitee.com/dotnetchina/Furion/issues/I3O2QQ)
  - [新增] 新增 `Scoped.Create` 带返回值重载 [#I3O47J](https://gitee.com/dotnetchina/Furion/issues/I3O47J)
  - [新增] 支持 `Scoped.Create()` 一系列方法支持传入作用域工厂 [#I3OAP5](https://gitee.com/dotnetchina/Furion/issues/I3OAP5)
  - [新增] 支持事件总线同步执行方式 [#I3OAW2](https://gitee.com/dotnetchina/Furion/issues/I3OAW2)
  - [新增] `[DataValidation]` 跳过空字符串和空值验证 [#I3OGEN](https://gitee.com/dotnetchina/Furion/issues/I3OGEN)
  - [新增] `Worker Service` 可配置是否自动注册 `Worker` [#I3OLW4](https://gitee.com/dotnetchina/Furion/issues/I3OLW4)

- **突破性变化**

- **问题修复**

  - [修复] 定时任务设置 `cancelInNoneNextTime: false` 一次也不执行 [#I3O3N0](https://gitee.com/dotnetchina/Furion/issues/I3O3N0)
  - [修复] SpareTime 自定义下次执行时间出现空异常 [#I3O46X](https://gitee.com/dotnetchina/Furion/issues/I3O46X)
  - [修复] `MiniProfiler` 设置为 `false` 时，数据库上下文提交拦截器未添加 [#I3OAWX](https://gitee.com/dotnetchina/Furion/issues/I3OAWX)
  - [修复] `[Consumes("application/x-www-form-urlencoded")]` 和 `ModelQuery` 配置同时配置导致空引用问题 [#I3ODUR](https://gitee.com/dotnetchina/Furion/issues/I3ODUR)
  - [修复] 在 Grpc 中使用 jwt 授权出现空异常 [#I3OW3I](https://gitee.com/dotnetchina/Furion/issues/I3OW3I)

- **其他更改**

  - [优化] 支持发布后代码精简配置，减少不必要的文件夹输出 [#I3OAPF](https://gitee.com/dotnetchina/Furion/issues/I3OAPF)
  - [优化] 自动刷新 Token 机制，新增容错值处理，解决并发 Token 刷新失败问题 [#I3OGYF](https://gitee.com/dotnetchina/Furion/issues/I3OGYF)

- **文档变化**

  - [新增] 粘土对象文档 [#I3OG18](https://gitee.com/dotnetchina/Furion/issues/I3OG18)

- **问答答疑**

  - [答疑] 动态 WebAPI 如何获取接收文件 [#I3O29B](https://gitee.com/dotnetchina/Furion/issues/I3O29B)
  - [答疑] 定时任务使用 `Scope.CreateUow` 引发的问题 [#I3O2CD](https://gitee.com/dotnetchina/Furion/issues/I3O2CD)
  - [答疑] 单文件发布程序工作不正常 [#I3O4D8](https://gitee.com/dotnetchina/Furion/issues/I3O4D8)
  - [答疑] 同时配置租户过滤器和软删除过滤器，最终的 sql 只生成了一种过滤条件 [#I3OB0A](https://gitee.com/dotnetchina/Furion/issues/I3OB0A)
  - [答疑] HTTP 重定向 HTTPS 后跨域失效 [#I3OB8R](https://gitee.com/dotnetchina/Furion/issues/I3OB8R)
  - [答疑] 在 PostgreSql 数据库使用 `rep.FirstOrDefault(u => u.Id == UserId);` 引起异常 [#I3O5OF](https://gitee.com/dotnetchina/Furion/issues/I3O5OF)
  - [答疑] 定时任务有时能触发有时不能触发 [#I3ORBE](https://gitee.com/dotnetchina/Furion/issues/I3ORBE)

- **不做实现**

  - [作废] 框架中的 swagger 是否有提供导出文档为 markdwon/word 的功能计划？ [#I3OL8O](https://gitee.com/dotnetchina/Furion/issues/I3OL8O)
  - [作废] 数据库实体父子继承，子类生成的 SQL 不一样 [#I3NHU3](https://gitee.com/dotnetchina/Furion/issues/I3NHU3)
  - [作废] 支持第三方数据库 ORM [#I3OXA3](https://gitee.com/dotnetchina/Furion/issues/I3OXA3)

---

## v2.1.0 （已发布）

- **新特性**

  - [新增] 新增定时任务 `ISpareTimeWorker` 方式支持 `[SpareTime("{配置路径}}]` 方式 [#I3NTUX](https://gitee.com/dotnetchina/Furion/issues/I3NTUX)
  - [新增] 定时任务支持异步委托 [#I3NP96](https://gitee.com/dotnetchina/Furion/issues/I3NP96)
  - [新增] 轻量级分布式连续 GUID 生成器 [#I3NKLZ](https://gitee.com/dotnetchina/Furion/issues/I3NKLZ)
  - [新增] `ClayObject` 模块，处理 `ExpandoObject` 及 `IDictionary<string,object>` 类型 [#I3N3J4](https://gitee.com/dotnetchina/Furion/issues/I3N3J4)
  - [新增] `Scoped.CreateUow(handler)` 创建作用域并自动提交数据库更改方法 [#I3NU3G](https://gitee.com/dotnetchina/Furion/issues/I3NU3G)

- **突破性变化**

  - [调整] 规范化结果接口 `OnResponseStatusCodes` 方法，新增 `UnifyResultStatusCodesOptions` 参数 [#I3NDB9](https://gitee.com/dotnetchina/Furion/issues/I3NDB9)
  - [移除] **雪花 ID 实现代码 [#I3NKLZ](https://gitee.com/dotnetchina/Furion/issues/I3NKLZ)**

- **问题修复**

  - [修复] `Swagger` 不能支持非 int 类型的枚举 [#I3NQM8](https://gitee.com/dotnetchina/Furion/issues/I3NQM8)
  - [修复] 数据库线程池多线程并发问题 [#I3NR4L](https://gitee.com/dotnetchina/Furion/issues/I3NR4L)
  - [修复] 自定义控制器路由后且为方法参数指定了 `[ApiSeat]` 后生成路由重复 [#I3NRF6](https://gitee.com/dotnetchina/Furion/issues/I3NRF6)

- **其他更改**

  - [改进] 支持应用启动的时候迁移种子数据 [#I3NH3M](https://gitee.com/dotnetchina/Furion/issues/I3NH3M)

- **文档变化**

  - [新增] 分布式 ID 生成文档 [#I3B6CX](https://gitee.com/dotnetchina/Furion/issues/I3B6CX)
  - [新增] 新增模块化开发文档 [#I3NSUS](https://gitee.com/dotnetchina/Furion/issues/I3NSUS)
  - [更新] 20.4 字符串拓展方式 > 错误`ToAESDecrypt` 写成了 `ToToAESDecrypt` [#](https://gitee.com/dotnetchina/Furion/issues/I3NNKV)

- **问答答疑**

  - [答疑] 有关【定时任务/委托】的疑问 [#I3N3EW](https://gitee.com/dotnetchina/Furion/issues/I3N3EW)
  - [答疑] 统一返回格式支持自定义 [#I3NU1G](https://gitee.com/dotnetchina/Furion/issues/I3NU1G)

- **不做实现**

  - [作废] 期待 IEnumerableExtensions 扩展 OrderBy 函数来支持分页排序 [#I3NOQ9](https://gitee.com/dotnetchina/Furion/issues/I3NOQ9)

---

## v2.0.0 （已发布）

- **新特性**

  - [新增] 控制台应用程序及 Worker Services 支持 [#I3K4DG](https://gitee.com/dotnetchina/Furion/issues/I3K4DG)
  - [新增] 完整任务调度功能 [#I3IRUX](https://gitee.com/dotnetchina/Furion/issues/I3IRUX)
  - [新增] `Cron` 表达式解析 [#I3IQ9Y](https://gitee.com/dotnetchina/Furion/issues/I3IQ9Y)
  - [新增] 支持 `Swagger` 自定义配置 `swagger.json` 地址模板 [#I3IHMX](https://gitee.com/dotnetchina/Furion/issues/I3IHMX)
  - [新增] 支持配置动态 WebApi 区域 [#I3IJAZ](https://gitee.com/dotnetchina/Furion/issues/I3IJAZ)
  - [新增] 远程请求新增支持传入服务提供器 `IServiceProvider` [#I3IVBL](https://gitee.com/dotnetchina/Furion/issues/I3IVBL)
  - [新增] 全局配置选型 `SupportPackageNamePrefixs` 配置，支持配置包前缀 [#I3K0SN](https://gitee.com/dotnetchina/Furion/issues/I3K0SN)
  - [新增] 应用启动时支持 `referenceassembly` 类型程序集扫描 [#I3K0SN](https://gitee.com/dotnetchina/Furion/issues/I3K0SN)
  - [新增] 依赖注入 `AOP` 拦截获取方法真实特性 [#I3LZBX](https://gitee.com/dotnetchina/Furion/issues/I3LZBX)
  - [新增] EFCore 手动 `SaveChanges()` 特性 [#I3N01Y](https://gitee.com/dotnetchina/Furion/issues/I3N01Y)
  - [新增] 支持 `Cors` 跨域更多配置 [#I3N2J0](https://gitee.com/dotnetchina/Furion/issues/I3N2J0)

- **突破性变化**

  - [重构] 完整任务调度功能 [#I3IRUX](https://gitee.com/dotnetchina/Furion/issues/I3IRUX)
  - [重构] 日志模块功能 [#I3J2K0](https://gitee.com/dotnetchina/Furion/issues/I3J2K0)
  - [重构] 模板引擎功能 [#I3J46E](https://gitee.com/dotnetchina/Furion/issues/I3J46E)
  - [重构] 底层 `EFCoreRepository` 仓储 [#I3J6W5](https://gitee.com/dotnetchina/Furion/issues/I3J6W5)
  - [重构] sql 字符串拓展底层代码 [#I3IVCE](https://gitee.com/dotnetchina/Furion/issues/I3IVCE)
  - [重构] 底层 `SqlRepository` 所有逻辑代码 [#I3J6V6](https://gitee.com/dotnetchina/Furion/issues/I3J6V6)
  - [重构] 数据库实体拓展方法 [#I3J609](https://gitee.com/dotnetchina/Furion/issues/I3J609)
  - [调整] 事件事件总线同步执行为异步方式执行 [#I3J0WA](https://gitee.com/dotnetchina/Furion/issues/I3J0WA)
  - [移除] 框架底层 `HttpContext.IsAjaxRequest()` 拓展 [#I3IVAA](https://gitee.com/dotnetchina/Furion/issues/I3IVAA)
  - [移除] `ValidationTypes.Required` 验证 [#I3KR85](https://gitee.com/dotnetchina/Furion/issues/I3KR85)

- **问题修复**

  - [修复] 关闭 `InjectMiniProfiler` 参数后内存缓存无效 [#I3IHLR](https://gitee.com/dotnetchina/Furion/issues/I3IHLR)
  - [修复] 在多租户中调用 `Tenant` 属性出现偶然性数据库上下文被释放的情况 [#I3IC70](https://gitee.com/dotnetchina/Furion/issues/I3IC70)
  - [修复] Sql 代理中如果返回基元类型抛出不能将 object 转换成对应类型的异常 [#I3IC84](https://gitee.com/dotnetchina/Furion/issues/I3IC84)
  - [修复] 存储过程多返回值的时候，outputvalues 的 name 不是定义的 MSG 的 name，是 Msg 类型。 [#I3IC7Y](https://gitee.com/dotnetchina/Furion/issues/I3IC7Y)
  - [修复] PhoneNumber 手机号验证正则表达式错误 [#I3ID10](https://gitee.com/dotnetchina/Furion/issues/I3ID10)
  - [修复] 依赖注入 AOP 拦截无法捕获内部异常 [#I3IGCC](https://gitee.com/dotnetchina/Furion/issues/I3IGCC)
  - [修复] 全局拦截标记异常已被处理后异常过滤器依然执行 [#I3J463](https://gitee.com/dotnetchina/Furion/issues/I3J463)
  - [修复] 自定义全局异常拦截器不起作用 [#I3K1SJ](https://gitee.com/dotnetchina/Furion/issues/I3K1SJ)
  - [修复] 在 WorkerService 模式下，还是使用 WebHostEnvironment 来判断 Host 环境，会导致错误 [#I3LCQY](https://gitee.com/dotnetchina/Furion/issues/I3LCQY)
  - [修复] 定时任务 `DoOnce` 抛空异常 bug [#I3M0ZT](https://gitee.com/dotnetchina/Furion/issues/I3M0ZT)

- **其他更改**

  - [改进] 启动时程序集扫描类型 [#I3K0SN](https://gitee.com/dotnetchina/Furion/issues/I3K0SN)
  - [改进] `App.GetConfig<>("key")` 不支持获取单个值问题 [#I3ILF1](https://gitee.com/dotnetchina/Furion/issues/I3ILF1)
  - [改进] UrlEncode 应该用 `Uri.EscapeDataString()` 而不是 `HttpUtility.UrlEncode` [#I3ICTK](https://gitee.com/dotnetchina/Furion/issues/I3ICTK)

- **文档变化**

  - [新增] 定位任务、后台任务文档 [#I3JHHG](https://gitee.com/dotnetchina/Furion/issues/I3JHHG)
  - [新增] 辅助角色服务文档 [#I3K5GN](https://gitee.com/dotnetchina/Furion/issues/I3K5GN)
  - [更新] 动态 WebAPI、规范化文档、数据库上下文文档

- **问答答疑**

  - [答疑] 数据校验，自定义 ErrorMessage 无效问题 [#I3ICL3](https://gitee.com/dotnetchina/Furion/issues/I3ICL3)
  - [答疑] 最新 issue 中新增的“新增常用的 JSON 序列化方法” 会导致 AOP 拦截异常 [#I3I7VE](https://gitee.com/dotnetchina/Furion/issues/I3I7VE)
  - [答疑] Furion.DatabaseAccessor.PrivateEntityBase 中的 TenantId 数据类型设置为 object [#I3IQV6](https://gitee.com/dotnetchina/Furion/issues/I3IQV6)
  - [答疑] 有关异常拦截和处理的疑问 [#I3IUFZ](https://gitee.com/dotnetchina/Furion/issues/I3IUFZ)
  - [答疑] `DataValidation` 在空值的情况下被忽略掉了[#I3IWSM](https://gitee.com/dotnetchina/Furion/issues/I3IWSM)
  - [答疑] 日志文档没有更新 [#I3J1DX](https://gitee.com/dotnetchina/Furion/issues/I3J1DX)
  - [答疑] 对于 webapi 简单类型参数，是否可以以 json 方式提交 [#I3J18I](https://gitee.com/dotnetchina/Furion/issues/I3J18I)
  - [答疑] `IUnifyResultProvider` 实现中如果 `UnifyModel` 的 type 不是范型会报错 [#I3JBXF](https://gitee.com/dotnetchina/Furion/issues/I3JBXF)
  - [答疑] 如何模块化开发新功能？ [#I3J7ZZ](https://gitee.com/dotnetchina/Furion/issues/I3J7ZZ)
  - [答疑] 建议增加微服务中间件的集成 [#I3JTZQ](https://gitee.com/dotnetchina/Furion/issues/I3JTZQ)
  - [答疑] 二级虚拟目录部署的 swagger 的 MiniProfiler js 报错 [#I3IWLR](https://gitee.com/dotnetchina/Furion/issues/I3IWLR)

- **不做实现**

  - [作废] 在请求审计日志中对贴有 DisableAuditing 特性的字段自动过滤 [#I3DHAN](https://gitee.com/dotnetchina/Furion/issues/I3DHAN)

---

## v1.19.0 （已发布）

- **新特性**

  - [新增] `EFCore 5.0` 支持 **SqlServer 2005-2008** 数据库 [#I3HZZ6](https://gitee.com/dotnetchina/Furion/issues/I3HZZ6)
  - [新增] `Sql` 高级代理支持模板替换了 [#I3HHWU](https://gitee.com/dotnetchina/Furion/issues/I3HHWU) [#I3HH2T](https://gitee.com/dotnetchina/Furion/issues/I3HH2T)
  - [新增] `PBKDF2` 加密 [#I3HN7A](https://gitee.com/dotnetchina/Furion/issues/I3HN7A)
  - [新增] 常用的 `JSON` 操作方法 [#I3HUYO](https://gitee.com/dotnetchina/Furion/issues/I3HUYO)
  - [新增] 所有解析服务的方法都支持传入 `IServiceProvidier` 参数 [#I3HXEU](https://gitee.com/dotnetchina/Furion/issues/I3HXEU)

- **突破性变化**

  - [升级] .NET 5 SDK 至 5.0.5 版本

- **问题修复**

  - [修复] 远程请求 `application/x-www-form-urlencoded` 自动被转码了 [#I3HDPC](https://gitee.com/dotnetchina/Furion/issues/I3HDPC)
  - [修复] `ISqlDispatchProxy` 调用带返回值的存储过程出错 [#I3HISS](https://gitee.com/dotnetchina/Furion/issues/I3HISS)
  - [修复] 多数据库工作单元异常无法回滚数据 [#I3I2KN](https://gitee.com/dotnetchina/Furion/issues/I3I2KN) [#I3HYN5](https://gitee.com/zuohuaijun/Admin.NET/issues/I3HYN5)
  - [修复] Serilog 日志生成太多文件 [#I3I2PN](https://gitee.com/dotnetchina/Furion/issues/I3I2PN)
  - [修复] `1.18.0` 版本数据库连接池存在连接泄漏问题 [#I3I5KO](https://gitee.com/dotnetchina/Furion/issues/I3I5KO)
  - [修复] Sqlite 提示事务已完成异常 [#I3I9F2](https://gitee.com/dotnetchina/Furion/issues/I3I9F2)

- **其他更改**

  - [改进] 视图模板功能，默认支持可枚举泛型类型 [#I3GYEE](https://gitee.com/dotnetchina/Furion/issues/I3GYEE)
  - [改进] 开发阶段 MiniProfiler 打印数据库相关信息 [#I3I8VQ](https://gitee.com/dotnetchina/Furion/issues/I3I8VQ)
  - [改进] EFCore 5.0 未提供 Sqlite 数据库 DataAdapter 的支持 [#I3I9FC](https://gitee.com/dotnetchina/Furion/issues/I3I9FC)

- **文档变化**

  - [更新] 数据库上下文、多租户、仓储、日志、序列化等文档。

- **问答答疑**

  - [答疑] 建议 MVC 模式下增加 Furion 的功能 [#I3GY4R](https://gitee.com/dotnetchina/Furion/issues/I3GY4R)
  - [答疑] 数据库关联操作 [#I3H5QP](https://gitee.com/dotnetchina/Furion/issues/I3H5QP)
  - [答疑] 1.17.5 版本 suagger 无法生成 swagger.json [#I3HGPZ](https://gitee.com/dotnetchina/Furion/issues/I3HGPZ)
  - [答疑] Serilog 扩展+dll 启动与 swagger 的 MiniProfiler 冲突 [#I3HWJM](https://gitee.com/dotnetchina/Furion/issues/I3HWJM)
  - [答疑] Sql 高级代理返回 DataTable 时，结果为空取不到记录 [#I3HUWG](https://gitee.com/dotnetchina/Furion/issues/I3HUWG)
  - [答疑] Task.Run 操作数据库问题 [#I3HZ9D](https://gitee.com/dotnetchina/Furion/issues/I3HZ9D)

- **不做实现**

---

## v1.18.0 （已发布）

- **新特性**

  - [新增] `Oracle` 11 版本支持 [#I3EVL5](https://gitee.com/dotnetchina/Furion/issues/I3EVL5)
  - [新增] `Mysql` 官方包 `MySql.EntityFrameworkCore` 支持 [#I3E6J1](https://gitee.com/dotnetchina/Furion/issues/I3E6J1)
  - [新增] 全局配置 `WebApi` 参数 `[FromQury]` 化 [#I3EFYJ](https://gitee.com/dotnetchina/Furion/issues/I3EFYJ)
  - [新增] 公开框架底层依赖注入扫描注册拓展 `services.AddRisterTypes(types)` [#I3EIV3](https://gitee.com/dotnetchina/Furion/issues/I3EIV3)
  - [新增] SqlSugar 工作单元特性 [#I3EJO5](https://gitee.com/dotnetchina/Furion/issues/I3EJO5)

- **突破性变化**

- **问题修复**

  - [修复] 数据库上下文池一旦有上下文操作失败还数据库上下文出现二次提交数据库的问题 [#I3EIJJ](https://gitee.com/dotnetchina/Furion/issues/I3EIJJ)
  - [修复] 不同数据库命令参数前缀都添加了 `@` 处理 [#I3EBJP](https://gitee.com/dotnetchina/Furion/issues/I3EBJP)
  - [修复] 尝试修复事件总线线程安全问题 [#I3EGSB](https://gitee.com/dotnetchina/Furion/issues/I3EGSB) [#PR236](https://gitee.com/dotnetchina/Furion/pulls/236)
  - [修复] `HttpContextExtensions` 的 `SignoutToSwagger` 方法无效 [#I3EHNQ](https://gitee.com/dotnetchina/Furion/issues/I3EHNQ)
  - [修复] 如果动态 WebApi 贴了 `[ApiController]` 特性后，导致路由参数重复生成 [#I3EOQQ](https://gitee.com/dotnetchina/Furion/issues/I3EOQQ)
  - [修复] 如果没有任何 webapi 控制器时，文档报错 [#I3EVLB](https://gitee.com/dotnetchina/Furion/issues/I3EVLB)
  - [修复] 依赖注入泛型类型注册失败 [#I3EX66](https://gitee.com/dotnetchina/Furion/issues/I3EX66)

- **其他更改**

  - [调整] SqlSugar 拓展库仓储 `Context` 属性类型未 `SqlSugarClient` [#I3EHXA](https://gitee.com/dotnetchina/Furion/issues/I3EHXA)
  - [改进] 刷新 Token 黑名单 Redis 中分组 [#I3EQWO](https://gitee.com/dotnetchina/Furion/issues/I3EQWO)
  - [改进] 远程请求在请求拦截次发起二次请求导致异常问题 [#I3ER71](https://gitee.com/dotnetchina/Furion/issues/I3ER71)
  - [改进] 多租户默认缓存改为分布式缓存 [#I3EXEU](https://gitee.com/dotnetchina/Furion/issues/I3EXEU)

- **文档变化**

  - [更新] 数据库操作文档 [#I3E84X](https://gitee.com/dotnetchina/Furion/issues/I3E84X)

- **问答答疑**

  - [答疑] 如何方便的获取 `IDynamicApiController` API 产生的 url 和 谓词 [#I3ED17](https://gitee.com/dotnetchina/Furion/issues/I3ED17)
  - [答疑] Code First -执行命令 `Add-Migration` 遇到了问题 [#I3EHD0](https://gitee.com/dotnetchina/Furion/issues/I3EHD0)
  - [答疑] tools v1.16.0 无法生成实体，一直提示 Missing required argument `<PROVIDER>`. [#I3ENZ8](https://gitee.com/dotnetchina/Furion/issues/I3ENZ8)
  - [答疑] Authorize 的 Logout 按钮，无法实时请空 token[#I3EOF9](https://gitee.com/dotnetchina/Furion/issues/I3EOF9)

- **不做实现**

---

## v1.17.0 （已发布）

- **新特性**

  - [新增] 动态 WebAPI 支持继承基类配置特性 [#I3D5PX](https://gitee.com/dotnetchina/Furion/issues/I3D5PX)
  - [新增] 远程请求支持 `multipart/form-data` 内容类型处理 [#I3D7KG](https://gitee.com/dotnetchina/Furion/issues/I3D7KG)
  - [新增] 字符串加密拓展 [#I3DHBW](https://gitee.com/dotnetchina/Furion/issues/I3DHBW)
  - [新增] 新增远程请求可直接下载返回值内容转为 string 类型 [#I3DIGR](https://gitee.com/dotnetchina/Furion/issues/I3DIGR)
  - [新增] 远程请求地址支持模板引擎 [#I3D5Y8](https://gitee.com/dotnetchina/Furion/issues/I3D5Y8)
  - [新增] `[DataValidation]` 错误消息支持 `string.Format` 操作 [#I3E08W](https://gitee.com/dotnetchina/Furion/issues/I3E08W)
  - [新增] 远程请求 `HttpRequestMessage` 拓展方法 `AppendQueries()` 追加更多 `query` 参数拓展 [#I3E3DI](https://gitee.com/dotnetchina/Furion/issues/I3E3DI)

- **突破性变化**

  - [调整] `IRepository.AsAsyncEnumerable()` 返回值 [#I3DIQ1](https://gitee.com/dotnetchina/Furion/issues/I3DIQ1)，调整为：`rep.AsQueryable().ToListAsync()`

- **问题修复**

  - [修复] 数据验证失败后也打印了成功的字段 [#I3CVBS](https://gitee.com/dotnetchina/Furion/issues/I3CVBS)
  - [修复] 远程请求配置 `contentType` 为 `application/x-www-form-urlencoded` 无效问题[#I3CWBS](https://gitee.com/dotnetchina/Furion/issues/I3CWBS)
  - [修复] 远程请求无法打印完整的请求地址，比如配置了 HttpClient 之后 [#I3CY42](https://gitee.com/dotnetchina/Furion/issues/I3CY42)
  - [修复] 程序启动时排除默认配置文件算法不对，应该采用正则表达式匹配 [#I3D9E7](https://gitee.com/dotnetchina/Furion/issues/I3D9E7)
  - [修复] 远程请求成功请求拦截不生效 [#I3DOE4](https://gitee.com/dotnetchina/Furion/issues/I3DOE4)
  - [修复] `Dapper` 拓展数据库切换为 oracle 时，系统找不到指定的文件 `Oracle.ManagedDataAccess.Core` [#I3DYM3](https://gitee.com/dotnetchina/Furion/issues/I3DYM3)

- **其他更改**

  - [改进] 获取 `JWT token` 信息支持配置 `Token` 前缀，如 `Bearer ` [#I3DJIV](https://gitee.com/dotnetchina/Furion/issues/I3DJIV)
  - [改进] 刷新 Token 黑名单存储方式，将内存缓存调整为分布式缓存 [#I3DPBR](https://gitee.com/dotnetchina/Furion/issues/I3DPBR)

- **文档变化**

  - [调整] 远程请求文档 [#I3CPJO](https://gitee.com/dotnetchina/Furion/issues/I3CPJO)

- **问答答疑**

  - [答疑] `LinqExpression.And` 没有 2 个参数的方法 [#I3CXKZ](https://gitee.com/dotnetchina/Furion/issues/I3CXKZ)
  - [答疑] 异常信息 如何记录到数据库中:) [#I3DDGO](https://gitee.com/dotnetchina/Furion/issues/I3DDGO)
  - [答疑] 无键实体选用 `IEntityNotKey` [#I3DWRF](https://gitee.com/dotnetchina/Furion/issues/I3DWRF)
  - [答疑] 根据主键删除一条记录不成功，无错误信息 [#I3DWWF](https://gitee.com/dotnetchina/Furion/issues/I3DWWF)
  - [答疑] 如何自定义接口返回格式 [#I3DZN6](https://gitee.com/dotnetchina/Furion/issues/I3DZN6)
  - [答疑] DynamicApiController 如何在运行时决定是否公开一个 Action [#I3D5UL](https://gitee.com/dotnetchina/Furion/issues/I3D5UL)
  - [答疑] `Furion.DatabaseAccessor.DbHelpers` 方法：`ConvertToDbParameters` 是不是应该过滤掉贴 `NotMapped` 的特性 [#I3E2XS](https://gitee.com/dotnetchina/Furion/issues/I3E2XS)

- **不做实现**

  - [废弃] 框架是否提供 `ISoftDelete` 类似接口 [#I3CP93](https://gitee.com/dotnetchina/Furion/issues/I3CP93)

---

## v1.16.0 （已发布）

- **新特性**

  - [新增] `IDGenerator` 雪花 ID 算法，感谢 [idgenerator](https://gitee.com/yitter/idgenerator) 作者提交 PR [#PR204](https://gitee.com/dotnetchina/Furion/pulls/204) [#I3B60S](https://gitee.com/dotnetchina/Furion/issues/I3B60S)
  - [新增] `DbContext` 刷新多租户缓存拓展方法 [#I39N5U](https://gitee.com/dotnetchina/Furion/issues/I39N5U)
  - [新增] 自定义配置单个控制器名称规范，如小写路由 [#I3A5XL](https://gitee.com/dotnetchina/Furion/issues/I3A5XL)
  - [新增] 获取当前选择区域语言方法 [#I3BSDH](https://gitee.com/dotnetchina/Furion/issues/I3BSDH)

- **突破性变化**

  - [升级] .NET 5 SDK 至 5.0.4 版本 [#I3ASTL](https://gitee.com/dotnetchina/Furion/issues/I3ASTL)
  - [重构] 远程请求所有功能 [#I2LB7M](https://gitee.com/dotnetchina/Furion/issues/I2LB7M)
  - [重构] `JSON` 序列化功能，提供统一的抽象接口，方便自由替换 `JSON` 库 [#I39GT9](https://gitee.com/dotnetchina/Furion/issues/I39GT9)
  - [重构] 验证失败返回消息模型及规范化接口验证参数 [#I3AFQW](https://gitee.com/dotnetchina/Furion/issues/I3AFQW)
  - [优化] 插件式开发热插拔功能，实现动态加载卸载 [#PR200](https://gitee.com/dotnetchina/Furion/pulls/200), 感谢 [@SamWangCoder](https://gitee.com/samwangcoder)
  - [移除] 移除 `JsonSerializerUtility` 静态类及移除属性大写序列化拓展配置 [#I3AFRJ](https://gitee.com/dotnetchina/Furion/issues/I3AFRJ)

- **问题修复**

  - [修复] `MVC` 模式下不支持验证自定义验证逻辑 [#I39LM5](https://gitee.com/dotnetchina/Furion/issues/I39LM5)
  - [修复] 验证数值类型正则表达式不支持负数 bug [#I39YUV](https://gitee.com/dotnetchina/Furion/issues/I39YUV)
  - [修复] 框架启动时无法加载未被引用的程序集 bug [#I3A3Z4](https://gitee.com/dotnetchina/Furion/issues/I3A3Z4)
  - [修复] `EFCoreRepository.IsAttached()` 方法判断错误 bug [#I3A824](https://gitee.com/dotnetchina/Furion/issues/I3A824)
  - [修复] `动态API` 驼峰显示配置无效 bug [#I3AF32](https://gitee.com/dotnetchina/Furion/issues/I3AF32)
  - [修复] `cli.ps1` 不支持新版本 `EFCore` bug [#I3APO9](https://gitee.com/dotnetchina/Furion/issues/I3APO9)
  - [修复] `EFCore` 实体配置 `[Table]` 特性无效 bug [#I3BAYH](https://gitee.com/dotnetchina/Furion/issues/I3BAYH)
  - [修复] 动态 WebAPI `CheckIsSplitCamelCase` bug [#I3BLKX](https://gitee.com/dotnetchina/Furion/issues/I3BLKX)
  - [修复] 修复动态 WebAPI 配置保留 Action 的 Async 后缀无效问题 [#I3C3DA](https://gitee.com/dotnetchina/Furion/issues/I3C3DA)
  - [修复] `JWT` Token 刷新后旧的刷新 Token 依旧可用 bug [#I3C8ZH](https://gitee.com/dotnetchina/Furion/issues/I3C8ZH)
  - [修复] 多语言 `Razor` 视图变量多语言乱码问题 [#I3CBMU](https://gitee.com/dotnetchina/Furion/issues/I3CBMU)

- **其他更改**

  - [优化] 默认序列化提供器 `System.Text.Json` 反序列化字符串时区分大小写问题 [#I3BSXV](https://gitee.com/dotnetchina/Furion/issues/I3BSXV)
  - [优化] 优化 `MessageCenter` 性能问题 [#I39PRR](https://gitee.com/dotnetchina/Furion/issues/I39PRR)
  - [优化] 数据库上下文池小性能优化

- **文档变化**

  - [新增] `Docker` 环境下自动化部署 [#PR209](https://gitee.com/dotnetchina/Furion/pulls/209)
  - [新增] `JSON` 序列化 文档 [#I3B6D8](https://gitee.com/dotnetchina/Furion/issues/I3B6D8)
  - [更新] 跨域、安全授权、即时通信文档、多语言、规范化文档

- **问答答疑**

  - [答疑] `Furion.Extras.DatabaseAccessor.SqlSugar` 配置多个数据库打印 SQL 语句问题 [#I39PDC](https://gitee.com/dotnetchina/Furion/issues/I39PDC)
  - [答疑] `ORACLE` 数据库多租户模式下返回值为指定类型时系统卡死 [#I39RNH](https://gitee.com/dotnetchina/Furion/issues/I39RNH)
  - [答疑] 假删除指向异常 [#I39XZA](https://gitee.com/dotnetchina/Furion/issues/I39XZA)
  - [答疑] `Furion` 多语言配置节是放在 `AppSettings` 里面还是外面呢？ [#I3A4SB](https://gitee.com/dotnetchina/Furion/issues/I3A4SB)
  - [答疑] 没找到数据库上下文 [#I3A5HS](https://gitee.com/dotnetchina/Furion/issues/I3A5HS)
  - [答疑] 有 `QQ` 交流群吗？ [#I3AAM7](https://gitee.com/dotnetchina/Furion/issues/I3AAM7)
  - [答疑] `Vue3` 环境下配置 `SignalR` 跨域出错 [#I3ALQ7](https://gitee.com/dotnetchina/Furion/issues/I3ALQ7)
  - [答疑] 设置 `Swagger` 参数非必填 [#I3AT02](https://gitee.com/dotnetchina/Furion/issues/I3AT02)
  - [答疑] EFCore 调用 Insert 时报 `Unknown column 'Discriminator' in 'field list'` 异常 [#I3B2LC](https://gitee.com/dotnetchina/Furion/issues/I3B2LC)
  - [答疑] 逆向 `mysql` 数据库时 `cli` 出现错误 [#I3B64F](https://gitee.com/dotnetchina/Furion/issues/I3B64F)
  - [答疑] Sql 高级代理使用过程中 DateTime 类型的参数序列化失败 [#I3AZXK](https://gitee.com/dotnetchina/Furion/issues/I3AZXK)
  - [答疑] 使用 Mysql 执行 Add-Migration 报错 [#I3B8EW](https://gitee.com/dotnetchina/Furion/issues/I3B8EW)
  - [答疑] Saas 多租户模式-独立 Database 模式下无法获取 Tenant, 导致无法自动切换的问题[#I3AVXU](https://gitee.com/dotnetchina/Furion/issues/I3AVXU)
  - [答疑] 如何自定义 WebAPI 统一结果模型 [#I3BBYW](https://gitee.com/dotnetchina/Furion/issues/I3BBYW) [#I3BBYV](https://gitee.com/dotnetchina/Furion/issues/I3BBYV)
  - [答疑] 在 `Web.Entry` 项目新建了一个 `Controller`，多了未知方法 [#I3BKH5](https://gitee.com/dotnetchina/Furion/issues/I3BKH5)
  - [答疑] `AOP` 拦截如何解析服务 [#I3BUM3](https://gitee.com/dotnetchina/Furion/issues/I3BUM3)
  - [答疑] 动态 WebAPI 返回参数被省略 [#I3C2XR](https://gitee.com/dotnetchina/Furion/issues/I3C2XR)
  - [答疑] 如何设置某一个接口响应数据不自动转小写，按原始字段名返回 [#I38L9B](https://gitee.com/dotnetchina/Furion/issues/I38L9B)
  - [答疑] code first 如何配置自动迁移 [#I3CCR0](https://gitee.com/dotnetchina/Furion/issues/I3CCR0)
  - [答疑] webapi 混合授权如何区分不同系统 [#I3CJCY](https://gitee.com/dotnetchina/Furion/issues/I3CJCY)
  - [答疑] EFCore 不支持递归无限级遍历关系 [#I3CET9](https://gitee.com/dotnetchina/Furion/issues/I3CET9)

- **不做实现**

  - [废弃] 建议 `EFCore` 可配置外键关系导航问题 [#I3994X](https://gitee.com/dotnetchina/Furion/issues/I3994X)
  - [废弃] 建议将 `EFCore` 剥离出来，作为插件的形式提供。这样可以选择自己喜欢的 `ORM` [#I3ABNX](https://gitee.com/dotnetchina/Furion/issues/I3ABNX)
  - [废弃] 事件总线能否提供返回值 [#I3AWL6](https://gitee.com/dotnetchina/Furion/issues/I3AWL6)
  - [废弃] Sql 模板能仿照 Mybatis 一样加各种标签吗？[#I3ASRS](https://gitee.com/dotnetchina/Furion/issues/I3ASRS)
  - [废弃] EFCore 更新或排除更新指定列支持传入 DTO 模型 [#I3AS5K](https://gitee.com/dotnetchina/Furion/issues/I3AS5K)
  - [废弃] 新增 `UnitOfWork` 事务完成事件 [#I3BRMI](https://gitee.com/dotnetchina/Furion/issues/I3BRMI)

---

## v1.15.0 （已发布）

- **新特性**

  - [新增] 跳过特定实体数据库操作监听特性 [#I386LB](https://gitee.com/dotnetchina/Furion/issues/I386LB)
  - [新增] `IEntityChangedListener` 增加对 `OldEntity` 的支持 [#I385X2](https://gitee.com/dotnetchina/Furion/issues/I385X2)
  - [新增] 实时通信自动配置集线器拓展及特性 [#I387QX](https://gitee.com/dotnetchina/Furion/issues/I387QX)
  - [新增] `Mapster` 拓展支持 `IMapper` 依赖注入方式 [#I38C7C](https://gitee.com/dotnetchina/Furion/issues/I38C7C)
  - [新增] `[AppDbContext]` 特性默认构造函数 [#I38J97](https://gitee.com/dotnetchina/Furion/issues/I38J97)
  - [新增] `UnifyContext.GetExceptionMetadata(context)` 返回错误码支持 [#I38ONX](https://gitee.com/dotnetchina/Furion/issues/I38ONX)

- **突破性变化**

- **问题修复**

  - [修复] 多次循环中调用 `Db.GetNewDbContext()` 还是获取到同一个对象 [#I38NNP](https://gitee.com/dotnetchina/Furion/issues/I38NNP)
  - [修复] `Swagger` 过滤掉 `object ` 类型属性问题 [#I38FHL](https://gitee.com/dotnetchina/Furion/issues/I38FHL)
  - [修复] 同一类不支持多继承 `IEntityChangedListener` 问题 [#I38UQJ](https://gitee.com/dotnetchina/Furion/issues/I38UQJ)
  - [修复] 自定义序列化属性名称导致验证失败属性不匹配问题 [#I38W8Z](https://gitee.com/dotnetchina/Furion/issues/I38W8Z)

- **其他更改**

  - [优化] 代码不规范命名导致开发者阅读代码时产生歧义

- **文档变化**

  - [新增] `FluentValidation` 集成文档 [#I38IOT](https://gitee.com/dotnetchina/Furion/issues/I38IOT)

- **问答答疑**

  - [答疑] `Furion` 框架版本向下兼容问题 [#I38WMZ](https://gitee.com/dotnetchina/Furion/issues/I38WMZ)

- **不做实现**

  - [废弃] 建议 `SqlSugar` 添加动态切换数据库功能 [#I38G4M](https://gitee.com/dotnetchina/Furion/issues/I38G4M)
  - [废弃] 建议 `MessageCenter` 采用 `Channel` 实现 [#I38BP8](https://gitee.com/dotnetchina/Furion/issues/I38BP8)
  - [废弃] 建议接口文档整合 Knife4jUI 或 Redoc [#I38S70](https://gitee.com/dotnetchina/Furion/issues/I38S70)

---

## v1.14.0（已发布）

- **新特性**

  - [新增] `EFCore` 5.0 的 `Oracle` 数据库支持 [#I37Z8E](https://gitee.com/dotnetchina/Furion/issues/I37Z8E)
  - [新增] 控制是否在开发环境下显示数据库连接信息 [#I37YQ2](https://gitee.com/dotnetchina/Furion/issues/I37YQ2)
  - [新增] `[NonUnify]` 支持在类中贴此特性 [#I359Q6](https://gitee.com/dotnetchina/Furion/issues/I359Q6)
  - [新增] `网络请求` 字符串 `HttpClient` 拦截器 [#I35F3E](https://gitee.com/dotnetchina/Furion/issues/I35F3E)
  - [新增] `HttpContext` 及 `HttpRequest` 获取远程地址拓展 [#I3688Z](https://gitee.com/dotnetchina/Furion/issues/I3688Z)
  - [新增] `services.AddMvcFilter<>` 添加 `Mvc` 过滤器拓展 [#I368BH](https://gitee.com/dotnetchina/Furion/issues/I368BH)

- **突破性变化**

  - [升级] 框架依赖的 .NET 5 SDK 至最新版 5.0.3 [#I37YQQ](https://gitee.com/dotnetchina/Furion/issues/I37YQQ)
  - [升级] `Swashbuckle.AspNetCore` 组件包到 `6.0.x` 版本 [#I37EZK](https://gitee.com/dotnetchina/Furion/issues/I37EZK)
  - [移除] `Furion` 框架 `JWT` 拓展类，只在 `Furion.Extras.Authentication.JwtBearer` 中保留 [#I35D59](https://gitee.com/dotnetchina/Furion/issues/I35D59)

- **问题修复**

  - [修复] 传入错误 `JWT Token` 字符串导致自动刷新 `Token` 出现字符串边界值异常 bug [#I34ZE5](https://gitee.com/dotnetchina/Furion/issues/I34ZE5)
  - [修复] 瞬时作用域数据库上下文也会自动加入工作单元导致写日志时连锁异常 bug [#I37WTV](https://gitee.com/dotnetchina/Furion/issues/I37WTV)

- **其他更改**

  - [优化] 获取系统环境参数的性能 [#I36SR5](https://gitee.com/dotnetchina/Furion/issues/I36SR5)
  - [优化] `Furion` 底层添加 `Mvc` 过滤器代码 [#I36SKA](https://gitee.com/dotnetchina/Furion/issues/I36SKA)
  - [优化] 添加默认 `Json` 序列化时间默认时间格式 [#I36SL0](https://gitee.com/dotnetchina/Furion/issues/I36SL0)
  - [升级] 升级 `SqlSugar` 拓展包到 `5.0.2.6` 版本 [#I36SIG](https://gitee.com/dotnetchina/Furion/issues/I36SIG)

- **文档变化**

  - [新增] 数据库入门文档 [#I37Z8S](https://gitee.com/dotnetchina/Furion/issues/I37Z8S)
  - [新增] 更新日志文档 [#I36PI0](https://gitee.com/dotnetchina/Furion/issues/I36PI0)
  - [新增] 请求审计日志、执行 `Sql` 更新日志文档 [#I36PIK](https://gitee.com/dotnetchina/Furion/issues/I36PIK)
  - [新增] 前端使用 `axios` 跨域配置文档 [#I36PIT](https://gitee.com/dotnetchina/Furion/issues/I36PIT)
  - [新增] `App` 静态类获取应用、环境更多信息数据 [#I36SOV](https://gitee.com/dotnetchina/Furion/issues/I36SOV)
  - [新增] 英文版 `README.md` 介绍 [#I37QHP](https://gitee.com/dotnetchina/Furion/issues/I37QHP)

- **问答答疑**

- **不做实现**

  - [废弃] 多语言资源文件自动创建 [#I35AA4](https://gitee.com/dotnetchina/Furion/issues/I35AA4)
  - [废弃] 建议多语言加上维吾尔语支持 [#I37X1L](https://gitee.com/dotnetchina/Furion/issues/I37X1L)

---

## v1.13.0（已发布）

- **新特性**

  - [新增] 多语言功能及拓展 [#I2DOCL](https://gitee.com/dotnetchina/Furion/issues/I2DOCL)
  - [新增] 事件总线功能及消息中心 [#I23BKN](https://gitee.com/dotnetchina/Furion/issues/I23BKN)
  - [新增] `Swagger` 分组显示隐藏配置 [#I2AHH8](https://gitee.com/dotnetchina/Furion/issues/I2AHH8)
  - [新增] `Furion.Extras.Logging.Serilog` 拓展插件 [#I2AAN8](https://gitee.com/dotnetchina/Furion/issues/I2AAN8)
  - [新增] `cli.ps` 支持 `-Namespace` 命名空间指定 [#I2A175](https://gitee.com/dotnetchina/Furion/issues/I2A175)
  - [新增] `Swagger` 规范化化文档授权失效后自动取消授权锁 [#I2AIWC](https://gitee.com/dotnetchina/Furion/issues/I2AIWC)
  - [新增] `Request.Body` 支持重复读功能，主要解决微信 SDK 问题 [#I2AMG0](https://gitee.com/dotnetchina/Furion/issues/I2AMG0)
  - [新增] 网络请求功能及文档 [#I2APGJ](https://gitee.com/dotnetchina/Furion/issues/I2APGJ)
  - [新增] `SqlSugar` 拓展包支持打印 `sql` 到 `MiniProfiler` 中 [#I2ASLS](https://gitee.com/dotnetchina/Furion/issues/I2ASLS)
  - [新增] `Furion.Extras.DatabaseAccesssor.Dapper` 拓展插件 [#I2ASYA](https://gitee.com/dotnetchina/Furion/issues/I2ASYA)
  - [新增] `Furion.Extras.DatabaseAccessor.PetaPoco` 拓展插件 [#I2AUGA](https://gitee.com/dotnetchina/Furion/issues/I2AUGA)
  - [新增] 网络请求字符串拓展方法 [#I2CPQ0](https://gitee.com/dotnetchina/Furion/issues/I2CPQ0)
  - [新增] `SqlSugar` 拓展新增 `PagedList` 拓展 [#I2CW99](https://gitee.com/dotnetchina/Furion/issues/I2CW99)
  - [新增] 远程请求支持参数特性验证 [#I2CX5L](https://gitee.com/dotnetchina/Furion/issues/I2CX5L)
  - [新增] `App.User` 获取当前授权用户信息便捷方法 [#I2CZLO](https://gitee.com/dotnetchina/Furion/issues/I2CZLO)
  - [新增] 规范化文档可配置功能，支持 `appsettings.json` 配置 [#I2D1K9](https://gitee.com/dotnetchina/Furion/issues/I2D1K9)
  - [新增] 远程请求拦截器添加方法和方法参数 [#I2D2CM](https://gitee.com/dotnetchina/Furion/issues/I2D2CM)
  - [新增] 远程请求出错返回默认值支持 [#I2D44M](https://gitee.com/dotnetchina/Furion/issues/I2D44M)
  - [新增] 远程请求 `body` 参数序列化支持设置 `PropertyNamingPolicy` [#I2D685](https://gitee.com/dotnetchina/Furion/issues/I2D685)
  - [新增] 远程服务接口客户端配置 [#I2D7PS](https://gitee.com/dotnetchina/Furion/issues/I2D7PS)
  - [新增] `AddInject` 和 `UseInject` 允许自定义 `SecurityDefinitions` 和 `SwaggerUI` [#I2DIMG](https://gitee.com/dotnetchina/Furion/issues/I2DIMG)
  - [新增] `[SecurityDefine]` 默认构造函数 [#I2DNXT](https://gitee.com/dotnetchina/Furion/issues/I2DNXT)
  - [新增] `AspectDispatchProxy` 动态代理类 [#I2DO6I](https://gitee.com/dotnetchina/Furion/issues/I2DO6I)
  - [新增] `[QueryParameters]` 特性，支持一键将 `Action` 参数添加 `[FromQuery]` 特性 [#I2G8TF](https://gitee.com/dotnetchina/Furion/issues/I2G8TF)
  - [新增] 动态日志配置及拓展方法 [#I2GDGD](https://gitee.com/dotnetchina/Furion/issues/I2GDGD)
  - [新增] `WebApi` 请求谓词默认规则配置功能 [#I2M70X](https://gitee.com/dotnetchina/Furion/issues/I2M70X)

- **突破性变化**

  - [升级] `.NET 5` SDK 到 `.NET 5.0.2` 版本 [#I2D0PZ](https://gitee.com/dotnetchina/Furion/issues/I2D0PZ)
  - [调整] 框架内所有拓展类命名空间，全部迁移到 `Furion.模块.Extensions` 下 [#I2AH54](https://gitee.com/dotnetchina/Furion/issues/I2AH54)
  - [调整] `Swagger` 记住授权存储方式，替换 `Session` 存储方式为 `LocalStorage` 方式 [#I2AKUA](https://gitee.com/dotnetchina/Furion/issues/I2AKUA)
  - [调整] `Furion` 框架包描述文件，减少框架体积 [#I2APAU](https://gitee.com/dotnetchina/Furion/issues/I2APAU)
  - [调整] `App.CanBeScanTypes` 为 `App.EffectiveTypes` [#I2B0ZR](https://gitee.com/dotnetchina/Furion/issues/I2B0ZR)
  - [调整] `App.ServiceProvider` 属性并移除 `App.GetDuplicateXXX` 方法 [#I2CYZE](https://gitee.com/dotnetchina/Furion/issues/I2CYZE)
  - [调整] `Db.GetDuplicateDbContext` 为 `Db.GetNewDbContext` [#I2CZ04](https://gitee.com/dotnetchina/Furion/issues/I2CZ04)
  - [调整] `Db.GetSqlDispatchProxy` 为 `Db.GetSqlProxy` [#I2DO9T](https://gitee.com/dotnetchina/Furion/issues/I2DO9T)
  - [重构] `Aop` 服务拦截器，支持异步、同步两种方式 [#I2B9HQ](https://gitee.com/dotnetchina/Furion/issues/I2B9HQ)
  - [重构] 网络请求所有功能 [#I2BMR7](https://gitee.com/dotnetchina/Furion/issues/I2BMR7)

- **问题修复**

  - [修复] `Swagger` 规范化化结果不一致 bug [#I2ACF3](https://gitee.com/dotnetchina/Furion/issues/I2ACF3)
  - [修复] 数据库新增或更新忽略空值操作方法报空异常 [#I2AB6C](https://gitee.com/dotnetchina/Furion/issues/I2AB6C)
  - [修复] `Startup.cs` Aop 全局拦截无效 [#I2A7T2](https://gitee.com/dotnetchina/Furion/issues/I2A7T2)
  - [修复] `Token` 过期后自动刷新 `Token` 无法获取最新的用户信息 bug [#I2AWQI](https://gitee.com/dotnetchina/Furion/issues/I2AWQI)
  - [修复] `[ApiDescriptionSettings(Tag="xx")]` 导致 `swagger.json` 报错 bug [#I2B47R](https://gitee.com/dotnetchina/Furion/issues/I2B47R)
  - [修复] `Mysql` sql 数据库查询结果 `tinyint` 类型转换出错 bug [#I2BEBM](https://gitee.com/dotnetchina/Furion/issues/I2BEBM)
  - [修复] 规范化结果多次包裹类型 bug [#I2BHHZ](https://gitee.com/dotnetchina/Furion/issues/I2BHHZ)
  - [修复] 动态 Api 基元类型数组问题 [#I2BMS5](https://gitee.com/dotnetchina/Furion/issues/I2BMS5)
  - [修复] `sql` 查询枚举类型转换异常 bug [#I2BS2Y](https://gitee.com/dotnetchina/Furion/issues/I2BS2Y)
  - [修复] `string.SqlQuerizeAsync<T1>()` 拓展返回错误 bug [#I2BSTS](https://gitee.com/dotnetchina/Furion/issues/I2BSTS)
  - [修复] 动态 Api 子类重写父类方法并取别名后 `Swagger` 异常 bug [#I2C9VP](https://gitee.com/dotnetchina/Furion/issues/I2C9VP)
  - [修复] 网络请求 `application/json` 序列化大小写问题 [#I2CRJC](https://gitee.com/dotnetchina/Furion/issues/I2CRJC)
  - [修复] 多数据库定位器实体嵌套关联 bug [#I2CVN0](https://gitee.com/dotnetchina/Furion/issues/I2CVN0)
  - [修复] 跨域响应头设置无效 bug [#I2CW5T](https://gitee.com/dotnetchina/Furion/issues/I2CW5T)
  - [修复] 远程网络请求代理打印到 `MiniProfiler` bug [#I2CZBC](https://gitee.com/dotnetchina/Furion/issues/I2CZBC)
  - [修复] 远程请求响应拦截器 bug [#I2D4DG](https://gitee.com/dotnetchina/Furion/issues/I2D4DG)
  - [修复] `SqlSugar` 框架 `AsQueryable()` 一直追加参数 [#I2DH1D](https://gitee.com/dotnetchina/Furion/issues/I2DH1D)
  - [修复] 自动刷新 `Token` 空异常 bug [#I2DO29](https://gitee.com/dotnetchina/Furion/issues/I2DO29)
  - [修复] 生成 `JWT Token` 不传过期时间出现验证 401 bug [#I2DO8L](https://gitee.com/dotnetchina/Furion/issues/I2DO8L)
  - [修复] `AppStartup` 排序无效 [#I2DVD2](https://gitee.com/dotnetchina/Furion/issues/I2DVD2)
  - [修复] 未启用多语言服务时友好异常和验证出现空异常 [#I2ECUJ](https://gitee.com/dotnetchina/Furion/issues/I2ECUJ)
  - [修复] 数据校验字母和数字组合无法匹配 bug [#I2EF2Q](https://gitee.com/dotnetchina/Furion/issues/I2EF2Q)
  - [修复] 数据校验手机或固话无效 bug [#I2M5IZ](https://gitee.com/dotnetchina/Furion/issues/I2M5IZ)
  - [修复] `Dapper` 拓展解析 `SqlConnection` 异常 bug [#I2M5P2](https://gitee.com/dotnetchina/Furion/issues/I2M5P2)
  - [修复] 开启多语言后，`EF` 迁移异常 bug [#I2M7DT](https://gitee.com/dotnetchina/Furion/issues/I2M7DT)
  - [修复] `IEntityTypeBuilder` 不支持多重继承 bug [#I2PAOD](https://gitee.com/dotnetchina/Furion/issues/I2PAOD)
  - [修复] `JwtHandler` 设置自动刷新后，匿名访问无法通过 bug [#I2SDOX](https://gitee.com/dotnetchina/Furion/issues/I2SDOX)
  - [修复] `Dapper` 拓展中 `SqlServer` 数据库获取连接对象类型 bug [#PR159](https://gitee.com/dotnetchina/Furion/pulls/159)

- **其他更改**

  - [优化] 移除 `Sql` 查询结果映射检查 `[NotMapper]` 特性机制 [#I34XD0](https://gitee.com/dotnetchina/Furion/issues/I34XD0)
  - [优化] 依赖注入时排除 `IDynamicApiController` 接口 [#I2ECTG](https://gitee.com/dotnetchina/Furion/issues/I2ECTG)
  - [优化] `MD5` 加密性能 [#PR158](https://gitee.com/dotnetchina/Furion/pulls/158)

- **文档变化**

  - [重构] 文档首页 [#I34XBR](https://gitee.com/dotnetchina/Furion/issues/I34XBR)
  - [新增] 网络请求文档 [#I2APGJ](https://gitee.com/dotnetchina/Furion/issues/I2APGJ)
  - [新增] 多语言文档 [#I2DOCL](https://gitee.com/dotnetchina/Furion/issues/I2DOCL)
  - [新增] 文档全文搜索引擎 [#I34XAW](https://gitee.com/dotnetchina/Furion/issues/I34XAW)
  - [新增] 全局静态类类型 [#I34XB4](https://gitee.com/dotnetchina/Furion/issues/I34XB4)
  - [新增] 框架可配置选项文档 [#I34XB9](https://gitee.com/dotnetchina/Furion/issues/I34XB9)
  - [新增] 事件总线文档 [#I34XBI](https://gitee.com/dotnetchina/Furion/issues/I34XBI)
  - [新增] 数据加解密文档 [#I34XC0](https://gitee.com/dotnetchina/Furion/issues/I34XC0)
  - [新增] 贡献指南文档 [#I34XC8](https://gitee.com/dotnetchina/Furion/issues/I34XC8)
  - [新增] `HttpContext` 及 `文件上传下载` 博客文章 [#I34XCB](https://gitee.com/dotnetchina/Furion/issues/I34XCB)
  - [其他] 文档小调整，小优化

- **问答答疑**

  - [答疑] 跨域设置无效 [#I2ASNJ](https://gitee.com/dotnetchina/Furion/issues/I2ASNJ)
  - [答疑] `MVC` 视图无效，原因是 `.cshtml` 文件没有设置为 `内容` [#I2AXUU](https://gitee.com/dotnetchina/Furion/issues/I2AXUU)
  - [答疑] `Sql` 操作可以实现事务吗？[#I2B0NX](https://gitee.com/dotnetchina/Furion/issues/I2B0NX)
  - [答疑] `IRepository` 操作数据库会打开多次数据库连接 [#I2BB7B](https://gitee.com/dotnetchina/Furion/issues/I2BB7B)
  - [答疑] 如何进入自定义 `AppAuthorizeHandler` 断点 [#I2BGXY](https://gitee.com/dotnetchina/Furion/issues/I2BGXY)
  - [答疑] `SqlSugar` 注入问题 [#I2C2AQ](https://gitee.com/dotnetchina/Furion/issues/I2C2AQ)
  - [答疑] 建议增加 API 签名验证，时效验证 [#I2C6ET](https://gitee.com/dotnetchina/Furion/issues/I2C6ET)
  - [答疑] 多数据库多租户同时使用 `Add-Migration` 报错 [#I2CEHS](https://gitee.com/dotnetchina/Furion/issues/I2CEHS)
  - [答疑] `ISqlSugarRepository` 没有 `Getxxx` 方法 [#I2CJLZ](https://gitee.com/dotnetchina/Furion/issues/I2CJLZ)
  - [答疑] `cli.ps1` 如何将 `sql` 里的表导出成 `model` 类 [#I2CSUL](https://gitee.com/dotnetchina/Furion/issues/I2CSUL)
  - [答疑] 手动修改 `Swagger` 终结点路径无效 [#I2D608](https://gitee.com/dotnetchina/Furion/issues/I2D608)
  - [答疑] `DefaultDbContext` 不能识别 [#I2DCZX](https://gitee.com/dotnetchina/Furion/issues/I2DCZX)
  - [答疑] 各分层项目 `Startup.cs` 支持 `Configuration` [#I2DDUP](https://gitee.com/dotnetchina/Furion/issues/I2DDUP)
  - [答疑] `Aop` 无法拦截，无效 [#I2DEY8](https://gitee.com/dotnetchina/Furion/issues/I2DEY8)
  - [答疑] `mysql` 执行 `Add-Migration` 报错 [#I2DSB8](https://gitee.com/dotnetchina/Furion/issues/I2DSB8)\
  - [答疑] `Entity` 创建时间和是否删除添加默认值 [#I2E04H](https://gitee.com/dotnetchina/Furion/issues/I2E04H)
  - [答疑] `swagger` 中多个 `servers` 设置 [#I2E0IF](https://gitee.com/dotnetchina/Furion/issues/I2E0IF)
  - [答疑] 全局筛选器 没有执行 [#I2E5R4](https://gitee.com/dotnetchina/Furion/issues/I2E5R4)
  - [答疑] 多数据库定位器疑问 [#I2E77T](https://gitee.com/dotnetchina/Furion/issues/I2E77T)
  - [答疑] `cli.ps` 逆向工程 `Mysql` 数据库报错 [#I2E7I5](https://gitee.com/dotnetchina/Furion/issues/I2E7I5)
  - [答疑] `Swagger` 开发环境 `applicationsettings.json` 中文乱码 [#I2EAG1](https://gitee.com/dotnetchina/Furion/issues/I2EAG1)
  - [答疑] 增加指定路径程序集映射 [#I2EEO2](https://gitee.com/dotnetchina/Furion/issues/I2EEO2)
  - [答疑] 动态编译 `cs` 脚本文件 [#I2EH66](https://gitee.com/dotnetchina/Furion/issues/I2EH66)
  - [答疑] 自定义中间件，返回的错误没有规范化结果 [#I2NV8S](https://gitee.com/dotnetchina/Furion/issues/I2NV8S)
  - [答疑] `Swagger` 循环引用设置生成文档层级无效 [#I2PLQQ](https://gitee.com/dotnetchina/Furion/issues/I2PLQQ)
  - [答疑] 配置文件支持 `yaml` 文件吗? [#I2TJ3N](https://gitee.com/dotnetchina/Furion/issues/I2TJ3N)
  - [答疑] 修改数据库未 `mysql` 执行 `Add-Migration` 报错 [#I2VR64](https://gitee.com/dotnetchina/Furion/issues/I2VR64)
  - [答疑] 多数据库使用定位器时报错 [#I2VR8F](https://gitee.com/dotnetchina/Furion/issues/I2VR8F)
  - [答疑] `Migration To Oracle` 异常 [#I2WBYQ](https://gitee.com/dotnetchina/Furion/issues/I2WBYQ)
  - [答疑] 开发时显示 `Swagger`，上线时关闭 `Swagger`，这需要怎么配置 [#I2WOYV](https://gitee.com/dotnetchina/Furion/issues/I2WOYV)
  - [答疑] 兼容 Mvc 复杂验证没有试验成功 [#I2X3GV](https://gitee.com/dotnetchina/Furion/issues/I2X3GV)
  - [答疑] `Aop` 能不能支持无接口的类 [#I2X8AS](https://gitee.com/dotnetchina/Furion/issues/I2X8AS)
  - [答疑] 关于 `JWT Token` 自动刷新问题 [#I2YD4K](https://gitee.com/dotnetchina/Furion/issues/I2YD4K)
  - [答疑] 能否增加一个拓展的 `Entity`，增加一些拓展的属性 [#I2YDKT](https://gitee.com/dotnetchina/Furion/issues/I2YDKT)
  - [答疑] `Furion` 无法还原包，使用`Nuget` 下载和通过最新的的脚手架下载都提示这个问题 [#I30446](https://gitee.com/dotnetchina/Furion/issues/I30446)
  - [答疑] 复杂校验与特性验证不能并行 [#I3046U](https://gitee.com/dotnetchina/Furion/issues/I3046U)

- **不做实现**

  - [废弃] 引入 Webhook 机制 [#I2A3I0](https://gitee.com/dotnetchina/Furion/issues/I2A3I0)
  - [废弃] 增加 blog 存储服务 [#I2AMBP](https://gitee.com/dotnetchina/Furion/issues/I2AMBP)
  - [废弃] Blazor Server 环境下 EF 的 DbContext 多线程问题 [#I2AMD2](https://gitee.com/dotnetchina/Furion/issues/I2AMD2)
  - [废弃] 希望实现工作单元操作接口（IUnitOfWork）[#I2AOR5](https://gitee.com/dotnetchina/Furion/issues/I2AOR5)
  - [废弃] 建议新增 `string.ToPagedListAsync()` 操作 [#I2BZ3Z](https://gitee.com/dotnetchina/Furion/issues/I2BZ3Z)
  - [废弃] 建议新增 `GraphQL`，`OData` 功能 [#I2C9EH](https://gitee.com/dotnetchina/Furion/issues/I2C9EH)
  - [废弃] 迫切期望支持 CAP 分布式事务 [#I2CBRF](https://gitee.com/dotnetchina/Furion/issues/I2CBRF)
  - [废弃] 如何让某个方法或实体变化后，不被 `SavingChangesEvent` 等拦截 [#I2CEM9](https://gitee.com/dotnetchina/Furion/issues/I2CEM9)
  - [废弃] 建议日志封装增加更多拓展，比如：自定义保存日志文件 [#I2CW8V](https://gitee.com/dotnetchina/Furion/issues/I2CW8V)
  - [废弃] 对 `SqlSugar` 的支持，增加 `Nuget` 脚手架 [#I2D91U](https://gitee.com/dotnetchina/Furion/issues/I2D91U)
  - [废弃] 使用 `Middleware` 实现反向代理 [#I2DKM1](https://gitee.com/dotnetchina/Furion/issues/I2DKM1)
  - [废弃] 支持配置多个 `Aop` 功能 [#I2E6Z2](https://gitee.com/dotnetchina/Furion/issues/I2E6Z2)
  - [废弃] 是否计划开发类似网关的功能 [#I2PD1L](https://gitee.com/dotnetchina/Furion/issues/I2PD1L)
  - [废弃] `waring CS8002`: 引用程序集 `Furion` 没有强名称 [#I2WDN2](https://gitee.com/dotnetchina/Furion/issues/I2WDN2)
  - [废弃] Oracle 数据库驱动集成 `Devart.Data.Oracle.Entity.EFCore` [#I2XJIU](https://gitee.com/dotnetchina/Furion/issues/I2XJIU)

---

## v1.7.0（已发布）

- **新特性**

  - [新增] `Furion.Extras.ObjectMapper.Mapster` 拓展包 [#I29LSJ](https://gitee.com/dotnetchina/Furion/issues/I29LSJ)
  - [新增] `Furion.Extras.Logging.Serilog` 拓展包 [#I2AAN8](https://gitee.com/dotnetchina/Furion/issues/I2AAN8)
  - [新增] `Furion.Extras.Web.HttpContext` 拓展包 [#I29LSM](https://gitee.com/dotnetchina/Furion/issues/I29LSM)
  - [新增] 内置 `Token` 刷新机制支持 [#I29K57](https://gitee.com/dotnetchina/Furion/issues/I29K57)
  - [新增] 动态数据库上下文，支持运行时执行 `OnModelCreating` [#I28UDT](https://gitee.com/dotnetchina/Furion/issues/I28UDT)
  - [新增] 支持依赖注入排除指定接口 [#I29693](https://gitee.com/dotnetchina/Furion/issues/I29693)
  - [新增] 规范化结果返回时间戳字段 [#I29697](https://gitee.com/dotnetchina/Furion/issues/I29697)
  - [新增] 基础 `CURD` 父类操作例子 [#I296SR](https://gitee.com/dotnetchina/Furion/issues/I296SR)
  - [新增] `sql.Change("定位器完整类型名称")` 支持 [#I29LAB](https://gitee.com/dotnetchina/Furion/issues/I29LAB)
  - [新增] `UpdateInclude` 和 `UpdateExclude` 忽略空参数支持 [#I29VUG](https://gitee.com/dotnetchina/Furion/issues/I29VUG)
  - [新增] 数据库上下文内置假删除查询过滤器支持 [#I29Y2R](https://gitee.com/dotnetchina/Furion/issues/I29Y2R)
  - [新增] 忽略空值排除默认时间格式 [#I29VUV](https://gitee.com/dotnetchina/Furion/issues/I29VUV)
  - [升级] `MiniProfiler` 组件 [#I297R9](https://gitee.com/dotnetchina/Furion/issues/I297R9)

- **突破性变化**

  - [调整] `AppAuthorizeHandler` 授权管道为异步处理 [#I29MD9](https://gitee.com/dotnetchina/Furion/issues/I29MD9)
  - [调整] `Swagger` 默认启用 `JWT` 授权支持 [#I29LI4](https://gitee.com/dotnetchina/Furion/issues/I29LI4)
  - [调整] `HttpContextUtilities` 名称改为 `HttpContextLocal` [#I29KQE](https://gitee.com/dotnetchina/Furion/issues/I29KQE)
  - [调整] `UnifyResultContext` 名称改为 `UnifyContext` [#I29LLZ](https://gitee.com/dotnetchina/Furion/issues/I29LLZ)
  - [调整] 只有执行迁移命令才扫描种子数据 [#I29E6P](https://gitee.com/dotnetchina/Furion/issues/I29E6P)
  - [调整] 规范化结果 `Successed` 属性名为 `Succeeded` [#I29NMV](https://gitee.com/dotnetchina/Furion/issues/I29NMV)
  - [移除] `Mapster` 对象组件，采用提供拓展方式 [#I29D2M](https://gitee.com/dotnetchina/Furion/issues/I29D2M)
  - [移除] `CacheManager` 拓展类 [#I29LU1](https://gitee.com/dotnetchina/Furion/issues/I29LU1)
  - [重构] `SaveChanges` 拦截器 [#I292LO](https://gitee.com/dotnetchina/Furion/issues/I292LO)

- **问题修复**

  - [修复] 未注册的数据库上下文也被引用全局查询拦截器 bug [#I29ZXJ](https://gitee.com/dotnetchina/Furion/issues/I29ZXJ)
  - [修复] 手动返回 `BadObjectResult` 或 `ValidationProblemDetails` 结果类型时规范化结果失效 bug [#I29ZU9](https://gitee.com/dotnetchina/Furion/issues/I29ZU9)
  - [修复] 动态 WebApi `KeepName`，`KeepVerb`、`SplitCamelCase` 无效 bug [#I29X90](https://gitee.com/dotnetchina/Furion/issues/I29X90)
  - [修复] `Sql代理` 返回 `元组` 类型出错 bug [#I29SMV](https://gitee.com/dotnetchina/Furion/issues/I29SMV)
  - [修复] `401，403` 状态码规范化返回值属性变大写 bug [#I29M8Y](https://gitee.com/dotnetchina/Furion/issues/I29M8Y)
  - [修复] `HttpContext` 空异常 bug [#I29LU4](https://gitee.com/dotnetchina/Furion/issues/I29LU4)
  - [修复] 接口无返回值没有应用规范化结果 bug [#I29GT7](https://gitee.com/dotnetchina/Furion/issues/I29GT7)
  - [修复] 前端 `Less` 配置文件导致主机启动失败 bug [#I29E7P](https://gitee.com/dotnetchina/Furion/issues/I29E7P)
  - [修复] 执行 `sql` 结果转泛型后属性重复赋值 bug [#I29BUO](https://gitee.com/dotnetchina/Furion/issues/I29BUO)
  - [修复] `Swagger` 关闭 `MiniProfiler` 之后 `组中组` 失效 [#I29789](https://gitee.com/dotnetchina/Furion/issues/I29789)
  - [修复] 未启用规范化结果时异常返回 `System.Object` 字符 [#I2969A](https://gitee.com/dotnetchina/Furion/issues/I2969A)
  - [修复] 正数数据验证 0 也验证通过 bug [#I2955T](https://gitee.com/dotnetchina/Furion/issues/I2955T)
  - [修复] 非泛型类集成泛型接口依赖注入 bug [#I294YT](https://gitee.com/dotnetchina/Furion/issues/I294YT)
  - [修复] `Swagger` 不支持 `new` 覆盖父类的 bug [#I28Z1A](https://gitee.com/dotnetchina/Furion/issues/I28Z1A)
  - [修复] `JsonSerializerUtility` 没有公开 bug [#I28WMI](https://gitee.com/dotnetchina/Furion/issues/I28WMI)
  - [修复] `SqlSugar` 拓展查询泛型类型注册异常 bug [#I28VMT](https://gitee.com/dotnetchina/Furion/issues/I28VMT)
  - [修复] `Furion Tools` 不支持生成不同命名空间的实体 bug [#I2A175](https://gitee.com/dotnetchina/Furion/issues/I2A175)
  - [修复] 全局拦截器无效 bug [#I2A7T2](https://gitee.com/dotnetchina/Furion/issues/I2A7T2)
  - [修复] 新增或更新忽略空值空异常 bug [#I2AB6C](https://gitee.com/dotnetchina/Furion/issues/I2AB6C)

- **其他更改**

  - [优化] `Token` 生成加密算法 [#I29KIH](https://gitee.com/dotnetchina/Furion/issues/I29KIH)

- **文档变化**

  - [新增] 日志文档 [#I28Y9D](https://gitee.com/dotnetchina/Furion/issues/I28Y9D)
  - [调整] 数据库上下文、实体拦截器、配置、一分钟入门等等文档

- **问答答疑**

  - [问答] `Swagger` 如何实现授权访问 [#I294F2](https://gitee.com/dotnetchina/Furion/issues/I294F2)
  - [问答] 如何实现多个数据库多对多实体配置 [#I29G6S](https://gitee.com/dotnetchina/Furion/issues/I29G6S)
  - [问答] 动态 WebApi 支持文件上传吗 [#I29R5E](https://gitee.com/dotnetchina/Furion/issues/I29R5E)
  - [疑问] 多个数据库上下文无法生成迁移代码 [#I2A6II](https://gitee.com/dotnetchina/Furion/issues/I2A6II)

- **不做实现**

  - [废弃] 实现 `BuildChange` 传入表名 [#I292SN](https://gitee.com/dotnetchina/Furion/issues/I292SN)
  - [废弃] 执行数据库操作结果不支持属性忽略大小写赋值 [#I29DRQ](https://gitee.com/dotnetchina/Furion/issues/I29DRQ)
  - [废弃] 引入 `Webhook` 机制 [#I2A3I0](https://gitee.com/dotnetchina/Furion/issues/I2A3I0)

---

## v1.4.0（已发布）

- **新特性**

  - [新增] `Furion` 支持二级虚拟目录部署功能 [#I28B77](https://gitee.com/dotnetchina/Furion/issues/I28B77)
  - [新增] `Furion.Template.RazorWithWebApi` 脚手架 [#I28QGI](https://gitee.com/dotnetchina/Furion/issues/I28QGI)
  - [新增] `Furion.Template.BlazorWithWebApi` 脚手架 [#I27Z3O](https://gitee.com/dotnetchina/Furion/issues/I27Z3O)
  - [新增] `EFCore` 时态查询拓展 [#I28AJ](https://gitee.com/dotnetchina/Furion/issues/I28AJ6)
  - [新增] `[AppDbContext(连接字符串，数据库类型)]` 配置支持 [#I28QTB](https://gitee.com/dotnetchina/Furion/issues/I28QTB)
  - [新增] `DateTimeOffset` 转 `DateTime` 拓展方法 [#I27MQA](https://gitee.com/dotnetchina/Furion/issues/I27MQA)
  - [新增] `ValidationTypes` 验证正则表达式智能提示 [#I2801V](https://gitee.com/dotnetchina/Furion/issues/I2801V)
  - [新增] `ValiationTypes.WordWithNumber` 验证 [#I2805](https://gitee.com/dotnetchina/Furion/issues/I2805A)
  - [新增] 获取客户端和服务端 IP 地址 [#I28QV9](https://gitee.com/dotnetchina/Furion/issues/I28QV9)

- **突破性变化**

  - [升级] .NET 5.0 版本至 .NET 5.0.1 版本 [#I28QU](https://gitee.com/dotnetchina/Furion/issues/I28QU1)
  - [重构] 视图引擎功能，优化不规范命名和新增字符串模板编译 [#I28G0S](https://gitee.com/dotnetchina/Furion/issues/I28G0S)
  - [重构] 数据库实体查找算法，并优化性能 [#I28QUQ](https://gitee.com/dotnetchina/Furion/issues/I28QUQ)
  - [优化] 应用启动初始化性能和数据库第一次自动配置 `DbSet` 性能

- **问题修复**

  - [修复] 多数据库上下文配置定位器后实体无法正确生成 bug [#I2888L](https://gitee.com/dotnetchina/Furion/issues/I2888L)
  - [修复] 多租户数据库上下文实体生成 bug [#I2891G](https://gitee.com/dotnetchina/Furion/issues/I2891G)
  - [修复] 对象验证失败提示消息没有应用 `JSON` 大小写配置 bug [#I27UTX](https://gitee.com/dotnetchina/Furion/issues/I27UTX)
  - [修复] 仓储 `Insert` 或 `Update` 方法指定 `ignoreNullValues` 无效 bug [#I27UN6](https://gitee.com/dotnetchina/Furion/issues/I27UN6)
  - [修复] `Controller` 派生类如果贴了 `[Route]` 特性后出现在 `Swagger` 中 bug [#I27TN7](https://gitee.com/dotnetchina/Furion/issues/I27TN7)
  - [修复] `SqlScalar` 执行 `sql` 返回 `Nullable` 类型出现转换失败 bug [#I27S2N](https://gitee.com/dotnetchina/Furion/issues/I27S2N)
  - [修复] `[UnitOfWork]` 特性异常 bug [#I27MLM](https://gitee.com/dotnetchina/Furion/issues/I27MLM)
  - [修复] `sql` 静态执行方式和 `sql` 高级代理无法监听数据库连接状态 bug [#I27M4F](https://gitee.com/dotnetchina/Furion/issues/I27M4F)
  - [修复] 修复更换 Json 序列化库无效 bug，如替换为 `Microsoft.AspNetCore.Mvc.NewtonsoftJson` [#I27M43](https://gitee.com/dotnetchina/Furion/issues/I27M43)
  - [修复] `Furion Tools` 工具生成模型 bug [#I27XI5](https://gitee.com/dotnetchina/Furion/issues/I27XI5)
  - [修复] 软删除没有生效 bug [#I2804I](https://gitee.com/dotnetchina/Furion/issues/I2804I)
  - [修复] `Furion Tools` 识别带多个 `\\` 的连接字符串识别 bug [#I280TS](https://gitee.com/dotnetchina/Furion/issues/I280TS)，[#PR91](https://gitee.com/dotnetchina/Furion/pulls/91)
  - [修复] `Furion Tools` 无法取消生成 bug [#I2816M](https://gitee.com/dotnetchina/Furion/issues/I2816M)
  - [修复] `DateTimeOffset` 转本地时间差 8 小时 bug [#I28BA9](https://gitee.com/dotnetchina/Furion/issues/I28BA9)
  - [修复] 启用 `bundle js&css` 压缩后启动异常 bug [#I28KR](https://gitee.com/dotnetchina/Furion/issues/I28KRP)
  - [修复] `ValidationTypes.Required` 无效 bug [#PR98](https://gitee.com/dotnetchina/Furion/pulls/98)
  - [修复] 规范化结果`OnValidateFailed` 参数名拼写错误 bug [#PR93](https://gitee.com/dotnetchina/Furion/pulls/93)，[#PR92](https://gitee.com/dotnetchina/Furion/pulls/92)
  - [修复] 授权管道验证失败还显示结果 bug [#PR89](https://gitee.com/dotnetchina/Furion/pulls/89)

- **其他更改**

  - [更新] README.md 友情连接地址 [#PR88](https://gitee.com/dotnetchina/Furion/pulls/88)
  - [更新] 模板脚手架源码，添加 `EFCore Tools` 库 [#PR87](https://gitee.com/dotnetchina/Furion/pulls/87)
  - [更新] README.md Nuget 图标 [#PR85](https://gitee.com/dotnetchina/Furion/pulls/85)
  - [废弃] 将 `List<T>` 转 `DateTable` [#PR97](https://gitee.com/dotnetchina/Furion/pulls/97)

- **文档变化**

  - [新增] 视图引擎模板文档 [#I27ZVA](https://gitee.com/dotnetchina/Furion/issues/I27ZVA)
  - [新增] `EFCore` 时态查询文档 [#I28AJ](https://gitee.com/dotnetchina/Furion/issues/I28AJ6), [DOC](https://dotnetchina.gitee.io/furion/docs/dbcontext-hight-query/#91111-%E6%97%B6%E6%80%81%E6%9F%A5%E8%AF%A2)
  - [更新] 仓储文档书写纰漏 bug [#PR90](https://gitee.com/dotnetchina/Furion/pulls/90)
  - [更新] 选项文档错误 bug [#PR86](https://gitee.com/dotnetchina/Furion/pulls/86)
  - [更新] `实体数据监听器` 文档书写错误 bug [#PR83](https://gitee.com/dotnetchina/Furion/pulls/83/files)
  - [更新] 数据库上下文、多数据库、脚手架等文档

- **问答答疑**

  - [建议] 希望 `api` 返回的值自动将 null 转为 '' 或 [] [#I286IJ](https://gitee.com/dotnetchina/Furion/issues/I286IJ)，【已关闭】
  - [建议] 添加网关功能 [#I27TP7](https://gitee.com/dotnetchina/Furion/issues/I27TP7)，【已关闭】
  - [建议] 新增 `SqlQuery<T>` 获取单条记录方法 [#I28M1V](https://gitee.com/dotnetchina/Furion/issues/I28M1V)，【已关闭】
  - [建议] 希望可以提供集成 `Serilog` 例子 [#I282J4](https://gitee.com/dotnetchina/Furion/issues/I282J4)，【已关闭】
  - [疑问] 如何通过特性配置唯一约束 [#I2891L](https://gitee.com/dotnetchina/Furion/issues/I2891L)，【已关闭】
  - [疑问] 怎么读取 `appsettings.json` 数组 [#I27WU](https://gitee.com/dotnetchina/Furion/issues/I27WUR)，【已关闭】
  - [疑问] `IRepository<TEntity>` 出现空异常 [#I281IE](https://gitee.com/dotnetchina/Furion/issues/I281IE)，【已关闭】
  - [疑问] 规范化接口问题问题 [#I28NMZ](https://gitee.com/dotnetchina/Furion/issues/I28NMZ)，【已关闭】
  - [疑问] 统一返回值模型中 OnResponseStatusCodes 未执行 [#I28NNL](https://gitee.com/dotnetchina/Furion/issues/I28NNL)，【已关闭】

---

## v1.2.0（已发布）

- **新特性**

  - [新增] 雪花算法 [#I26OXG](https://gitee.com/dotnetchina/Furion/issues/I26OXG), [#PR78](https://gitee.com/dotnetchina/Furion/pulls/78)
  - [新增] `[AppDbContext]` 配置数据库提供器支持 [#I27G3T](https://gitee.com/dotnetchina/Furion/issues/I27G3T)
  - [新增] 实体表数据更改监听接口 `IEntityDataChangedListener` [#I278DD](https://gitee.com/dotnetchina/Furion/issues/I278DD), [#I278LQ](https://gitee.com/dotnetchina/Furion/issues/I278LQ)
  - [新增] 全局服务接口 AOP 拦截功能 [#I278CP](https://gitee.com/dotnetchina/Furion/issues/I278CP)
  - [新增] 定位器仓储 `IDbRepository<TDbContextLocator>` [#I276Q3](https://gitee.com/dotnetchina/Furion/issues/I276Q3)
  - [新增] 数据库操作 `InsertOrUpdate` 支持排除空字符串功能 [#I272OG](https://gitee.com/dotnetchina/Furion/issues/I272OG)
  - [新增] 数据库操作 `UpdateInclude` 和 `UpdateExclude` 匿名对象支持 [#I271X0](https://gitee.com/dotnetchina/Furion/issues/I271X0)
  - [新增] 数据验证传入空对象跳过验证支持 [#I273R4](https://gitee.com/dotnetchina/Furion/issues/I273R4)
  - [新增] 应用启动时支持排除特定配置文件自动加载 [#I26U0A](https://gitee.com/dotnetchina/Furion/issues/I26U0A)
  - [新增] 单个实体表名前缀支持 [#I26LX0](https://gitee.com/dotnetchina/Furion/issues/I26LX0)
  - [新增] `MySql` 数据库自动配置默认版本号 [#I26XQ6](https://gitee.com/dotnetchina/Furion/issues/I26XQ6)
  - [优化] 授权处理程序代码

- **突破性变化**

  - [新增] 实体表数据更改监听接口 `IEntityDataChangedListener` [#I278DD](https://gitee.com/dotnetchina/Furion/issues/I278DD), [#I278LQ](https://gitee.com/dotnetchina/Furion/issues/I278LQ)
  - [新增] 全局服务接口 AOP 拦截功能 [#I278CP](https://gitee.com/dotnetchina/Furion/issues/I278CP)
  - [新增] 雪花算法 [#I26OXG](https://gitee.com/dotnetchina/Furion/issues/I26OXG), [#PR78](https://gitee.com/dotnetchina/Furion/pulls/78)

- **问题修复**

  - [修复] 视图引擎加载外部程序集出错 bug
  - [修复] 依赖注入代理接口报空对象异常 bug
  - [修复] `EFCore` 取消附加实体出错 bug
  - [修复] 数据库仓储在非 Web 请求下出现空异常 bug
  - [修复] 多个授权策略共存问题出现无效 bug
  - [修复] 友好异常 `Oop.Oh` 不支持普通方法 bug
  - [修复] 获取多租户对象时数据库上下文出现作用域验证失败 bug
  - [修复] 工作单元不支持 `Sql代理` 拦截 bug [#I27GST](https://gitee.com/dotnetchina/Furion/issues/I27GST)

- **其他更改**

  - [关闭] [#I26O1F](https://gitee.com/dotnetchina/Furion/issues/I26O1F), [#I27B2I](https://gitee.com/dotnetchina/Furion/issues/I27B2I), [#I27BJ6](https://gitee.com/dotnetchina/Furion/issues/I27BJ6), [#I27E5Z](https://gitee.com/dotnetchina/Furion/issues/I27E5Z), [#I27EL4](https://gitee.com/dotnetchina/Furion/issues/I27EL4)

- **文档变化**

  - [新增] [实体数据监听器](https://dotnetchina.gitee.io/furion/docs/dbcontext-entitytrigger) 文档
  - [更新] 一分钟入门、应用启动、官方脚手架、数据库操作指南、对象映射、规范化文档、异常处理、鉴权授权文档

---

## v1.1.0（已发布）

- **新特性**

  - [新增] `Db.GetDbContext()` 获取默认数据库上下文方法
  - [新增] `HttpContextUtility.GetCurrentHttpContext()` 获取全局 `HttpContext` 上下文
  - [新增] `App.GetRequiredService<>` 解析服务方法
  - [新增] `object.GetService<>` 对象拓展方法
  - [新增] 策略授权 `PolicyPipeline` 基类方法，支持多重判断授权
  - [新增] `JWTEncryption.ValidateJwtBearerToken` 手动验证静态方法
  - [新增] 全局数据库上下文 `InsertOrUpdateIgnoreNullValues` 和 `EnabledEntityStateTracked` 全局配置
  - [新增] `Swagger Jwt授权` 全局授权参数 [#I26GLR](https://gitee.com/dotnetchina/Furion/issues/I26GLR)
  - [新增] `InsertOrUpdate` 支持自定义判断条件功能 [#I269Q1](https://gitee.com/dotnetchina/Furion/issues/I269Q1)
  - [新增] 字符串字段小写命名支持 [#I2695D](https://gitee.com/dotnetchina/Furion/issues/I2695D)
  - [新增] 字符串文本对比功能 [#I268LE](https://gitee.com/dotnetchina/Furion/issues/I268LE)
  - [新增] 全局异常特性消息功能 [#I2662O](https://gitee.com/dotnetchina/Furion/issues/I2662O)
  - [新增] `Insert` 或 `Update` 数据库忽略空值功能 [#I264Q4](https://gitee.com/dotnetchina/Furion/issues/I264Q4)

- **突破性变化**

  - [调整] `Fur` 项目名为 `Furion`
  - [调整] `Db.GetRequestDbContext<>()` 命名为 `Db.GetDbContext<>()`
  - [调整] `Db.GetDbContext<>()` 命名为 `Db.GetDuplicateDbContext<>()`
  - [重构] `App.GetService<>` 解析服务的底层逻辑，大大提高了解析服务的性能
  - [重构] 授权核心代码，保持和微软一致的授权规范 [#I26DCB](https://gitee.com/dotnetchina/Furion/issues/I26DCB)
  - [移除] `App.GetRequestService<>` 方法
  - [移除] `ValidateJwtBearer` Jwt 授权方法，无需手动判断了

- **问题修复**

  - [修复] Furion 官方脚手架生成后编译异常 bug
  - [修复] `Tenant` 内置属性不是 `virtual` 修饰 bug
  - [修复] `dockerfile` 新命名构建失败 bug
  - [修复] 自定义角色授权和多个授权共存出现 403 bug [#I26H1L](https://gitee.com/dotnetchina/Furion/issues/I26H1L)
  - [修复] `httpContext.GetEndpoint()` 空异常 bug [#PR73](https://gitee.com/dotnetchina/Furion/pulls/73)
  - [修复] `Oops.Oh` 空异常和不支持服务服务抛异常 bug [#I26EFU](https://gitee.com/dotnetchina/Furion/issues/I26EFU)，[#I26GM4](https://gitee.com/dotnetchina/Furion/issues/I26GM4)
  - [修复] `cli.ps` 生成文件编码乱码 bug [#I26DVT](https://gitee.com/dotnetchina/Furion/issues/I26DVT)
  - [修复] `Swagger` 文件上传按钮不显示 [#I26B6U](https://gitee.com/dotnetchina/Furion/issues/I26B6U)
  - [修复] 规范化结果授权状态码序列化大小写不一致问题 [#I26B26](https://gitee.com/dotnetchina/Furion/issues/I26B26)
  - [修复] 未启用规范化结果时中文乱码 bug [#I268T5](https://gitee.com/dotnetchina/Furion/issues/I268T5)
  - [修复] `MySql` 异步异常捕获不到 bug [#I265SO](https://gitee.com/dotnetchina/Furion/issues/I265SO)
  - [修复] `cli.ps1` 提示找不到数据库连接字符串 bug [#I2647U](https://gitee.com/dotnetchina/Furion/issues/I2647U)

- **其他更改**

  - [其他] 代码性能小优化和小调整
  - [关闭] [#I265JV](https://gitee.com/dotnetchina/Furion/issues/I265JV)，[#I26ERA](https://gitee.com/dotnetchina/Furion/issues/I26ERA)， [#I26EVW](https://gitee.com/dotnetchina/Furion/issues/I26EVW)，[#I26GHC](https://gitee.com/dotnetchina/Furion/issues/I26GHC)，[#I26GJ1](https://gitee.com/dotnetchina/Furion/issues/I26GJ1)，[#I26O1F](https://gitee.com/dotnetchina/Furion/issues/I26O1F)

- **文档变化**

  - [更新] 一分钟入门、安全鉴权、数据库等文档

---

## v1.0.3（已发布）

- **新特性**

  - [新增] Mvc 模板脚手架：`Fur.Template.Mvc`
  - [新增] WebApi 模板：`Fur.Template.Api`
  - [新增] Mvc/WebApi 模板：`Fur.Template.App`
  - [新增] Razar Pages 模板：`Fur.Template.Razor`
  - [新增] Blazor 模板：`Fur.Template.Blazor`

- **突破性变化**

  - [调整] `PagedList` 到 `System.Collections.Generic` 命名空间下
  - [优化] 解析服务性能问题，底层代码大量优化

- **问题修复**

  - [修复] `ApiSears.ControllerEnd`不起作用 bug [#I25KH6](https://gitee.com/dotnetchina/Furion/issues/I25KH6)
  - [修复] `RemoteRequest` 请求完成结果序列化属性大小写问题 [#I25I8R](https://gitee.com/dotnetchina/Furion/issues/I25I8R)
  - [修复] `HttpContext.GetEndpoinet()` 空异常 bug [#PR73](https://gitee.com/dotnetchina/Furion/pulls/73)

- **其他更改**

  - 无

- **文档变化**

  - [更新] 入门文档、数据库上下文文档、多数据库操作文档

---

## v1.0.2（已发布）

- **新特性**

  - [新增] `Pomelo.EntityFrameworkCore.MySql` 最新 .NET 5 包配置 [#I24ZQK](https://gitee.com/dotnetchina/Furion/issues/I24ZQK)
  - [新增] `.AddDateTimeJsonConverter(format)` 时间格式序列化配置
  - [新增] `DateTime` 和 `DateTimeOffset` 类型序列化格式配置 [#I253FI](https://gitee.com/dotnetchina/Furion/issues/I253FI)

- **突破性变化**

  - [更新] `Mapster` 包至 `7.0.0` 版
  - [调整] `App.Services` 名为 `App.ServiceProvider`
  - [移除] `App.ApplicationServices` 和 `App.GetRequestService<>()`
  - [移除] 非 Web 主机注入拓展

- **问题修复**

  - [修复] `services.AddFriendlyException()` 缺少配置注入 bug
  - [修复] 数据库上下文池被释放和高并发下内存溢出 bug [#I2524K](https://gitee.com/dotnetchina/Furion/issues/I2524K)，[#I24UMN](https://gitee.com/dotnetchina/Furion/issues/I24UMN)
  - [修复] `Sql代理` 返回空数据时异常 bug [#I24TCK](https://gitee.com/dotnetchina/Furion/issues/I24TCK)
  - [修复] 工作单元 `[UnitOfWork]` 多数据库被释放 bug [#I24Q6W](https://gitee.com/dotnetchina/Furion/issues/I24Q6W)

- **其他更改**

  - [调整] `EntityBase` 和 `Entity` 所有属性为 `vitural` 修饰
  - [优化] `Jwt` 读取和解析性能
  - [优化] 优化代码支持 C# 9.0 最新语法
  - [优化] `MD5` 加密性能 [#PR71](https://gitee.com/dotnetchina/Furion/pulls/71)
  - [移除] 无用或未使用代码

- **文档**

  - [更新] 数据库上下文、多数据库、一分钟入门文档

---

## v1.0.0（已发布）

- **新特性**

  - [新增] 网络请求 `RemoteRequest` 组件 [#I1YYWD](https://gitee.com/dotnetchina/Furion/issues/I1YYWD)
  - [新增] `.AddInjectBase()` 注入，只包含基础服务注入
  - [新增] 所有服务都支持 `IServiceCollection` 和 `IMvcBuilder` 注入
  - [新增] 抛异常状态码设置功能 `StatusCode`
  - [新增] `Swagger` 序列化支持 `Pascal` 属性命名方式

- **突破性变化**

  - [更新] **所有的包为 `.NET 5` 正式版**

- **问题修复**

  - [修复] `SqlProxy` 代理异步处理 bug
  - [修复] 数据库类型 `Datetime` 转 `DateTimeOffset` bug
  - [修复] 属性首字母大小写序列化不匹配出现 `null` bug
  - [修复] 对象序列化中文出现乱码 bug
  - [修复] 默认序列化配置无效 bug
  - [修复] 数据库非依赖注入方式提交无效 bug
  - [修复] 应用程序池提交所有 `DbContext` 空异常 bug
  - [修复] `Saas` 多租户 `Tenant` 类型字符串属性在 `MySql` 数据库下出现 `longtext` 类型 bug
  - [修复] `Mvc` 自动验证字符串空值 bug [#I24M2T](https://gitee.com/dotnetchina/Furion/issues/I24M2T)
  - [修复] 枚举注释被覆盖 bug [#I24N6J](https://gitee.com/dotnetchina/Furion/issues/I24N6J)
  - [修复] 忽略规范化结果无效 bug [#I24B8P](https://gitee.com/dotnetchina/Furion/issues/I24B8P)
  - [修复] `Swagger` 默认 `ContentType` 不是 `applicaiton/json` bug [#I24F3U](https://gitee.com/dotnetchina/Furion/issues/I24F3U)
  - [修复] 内置 `System.Text.Json` 和 `Newtonsoft.Json` 冲突 bug [#I24F3U](https://gitee.com/dotnetchina/Furion/issues/I24F3U)

- **其他更改**

  - [调整] `Fur` 框架域名为：[https://furion.pro](https://furion.pro)
  - [调整] 仓储 `FromSqlRaw` 和 `FromSqlInterpolated` 接口位置
  - [优化] 数据加解密性能，[#PR70](https://gitee.com/dotnetchina/Furion/pulls/70)

- **文档**

  - [更新] README.md、框架介绍、数据库上下文、配置选项、多租户、跨域文档
